Jump to content

[Tutorial] ETAPELE DE REGISTER


WiDuAlK

Recommended Posts

Salutare, la cererea lui david1995 am decis să fac un tutorial despre cum să faceţi un register mai dezvoltat, anume punem condiţii de înregistrare. Va anunţ de la început că eu folosesc aceste scripturi pe tutorialul acesta: TUTORIALVom face 4 dialoguri corespunzătoare cu : Vârstă, Sex, Email, Refferal(opţional).Dar vom face şi o verificare de stagiul de register. Acest stagiu va fi folosit pentru a termină registerul dacă ai închis inaine de a termină de completat.

Mergem la enum-ul cu dialogurile şi adăugăm:

 

enum
{
    DIALOG_LOGIN, // dialogul de login
    DIALOG_REGISTER,// dialogul de register
    
    DIALOG_VARSTA,
    DIALOG_SEX,
    DIALOG_EMAIL,
    DIALOG_REFFERAL
};

acum mergem la enumeraţia pInfo şi adăugăm:

enum pInfo
{
    pParola,
    pID,
    
    pVarsta,
    pSex,
    pEmail,
    pRefferal,
    pRegisterStep// aceasta ne ajuta la verificare.
};

Acum că am adăugat acestea, mergem şi la OnDialogResponse şi facem o completare la dialogul de register, adică după ce ai băgat parolă să-ţi dea direct dialogurile de vârstă, sex, email refferal, apoi le creăm. Mergem la OnDialogResponse la DIALOG_REGISTER şi înlocuim în loc de SpawnPlayer(playerid) cu: ShowPlayerDialog(playerid, DIALOG_VARSTA, DIALOG_STYLE_INPUT, "Varsta", "Ce varsta doresti sa aiba caracterul?", "OK", ""); apoi sub case DIALOG_LOGIN punem:

case DIALOG_VARSTA:
		{
			if(response)
			{
				new varsta = strval(inputtext);// strval convertete un string in intenger(numar natural)
				
				if(varsta < 6 || varsta > 40)// daca numarul pe care il introduce e mai mare decat 40 de ani sau mai mic decat 6 ii returnam din nou dialogul de varsta:
						return ShowPlayerDialog(playerid, DIALOG_VARSTA, DIALOG_STYLE_INPUT, "Varsta", "Ce varsta doresti sa aiba caracterul?\n Trebuie sa ai intre 6 si 40 de ani!", "OK", "");
			
				// daca trece peste aceasta verificare se vor intampla urmatoarele:
				P_Data[playerid][pVarsta] = varsta;// variabila varsta va fi egala cu numarul introdus in casuta
				
				mysql_format(handle, query, sizeof(query), "UPDATE `conturi` SET `Varsta`='%d' WHERE `Nume`='%e'", P_Data[playerid][pVarsta], GetName(playerid));// introducem varsta sa fie egala cu cea care am introdus-o in casuta
				mysql_query(handle, query);// trimitem mesajul catre baza de date
				
				P_Data[playerid][pRegisterStep] = 1;
				
				mysql_format(handle, query, sizeof(query), "UPDATE `conturi` SET `RegisterStep`='%d' WHERE `Nume`='%e'", P_Data[playerid][pRegisterStep], GetName(playerid));// se updateaza
				mysql_query(handle, query);// se trimite interogarea
				
				ShowPlayerDialog(playerid, DIALOG_SEX, DIALOG_STYLE_MSGBOX, "Sex", "Ce sex doresti sa aiba caracterul?", "Masculin", "Feminin");// il timitem la dialogul de sex
			}
		}

Am făcut dialogul de vârstă, dar trebuie să apelăm la cel de sex, şi vom face uite aşa:

case DIALOG_SEX:
		{
			if(response)// daca apasa pe primul buton(masculin)
			{
				P_Data[playerid][pSex] = 1;//Seteaza pSex = 1(adica baiat)
				
				mysql_format(handle, query, sizeof(query), "UPDATE `conturi` SET `Sex`='%d' WHERE `Nume`='%e'", P_Data[playerid][pSex], GetName(playerid));// se updateaza sex-ul jucatorului
				mysql_query(handle, query);// se trimite catre baza de date.
				
				P_Data[playerid][pRegisterStep] = 2;
				
				mysql_format(handle, query, sizeof(query), "UPDATE `conturi` SET `RegisterStep`='%d' WHERE `Nume`='%e'", P_Data[playerid][pRegisterStep], GetName(playerid));// se updateaza
				mysql_query(handle, query);// se trimite interogarea
				
				ShowPlayerDialog(playerid, DIALOG_EMAIL, DIALOG_STYLE_INPUT, "Email", "Ce email ai?", "OK", "");// il timitem la dialogul de email
			}
			if(!response)
			{
				P_Data[playerid][pSex] = 2;//Seteaza pSex = 1(adica baiat)
				
				mysql_format(handle, query, sizeof(query), "UPDATE `conturi` SET `Sex`='%d' WHERE `Nume`='%e'", P_Data[playerid][pSex], GetName(playerid));// se updateaza sex-ul jucatorului
				mysql_query(handle, query);// se trimite catre baza de date.
				
				P_Data[playerid][pRegisterStep] = 2;
				
				mysql_format(handle, query, sizeof(query), "UPDATE `conturi` SET `RegisterStep`='%d' WHERE `Nume`='%e'", P_Data[playerid][pRegisterStep], GetName(playerid));// se updateaza
				mysql_query(handle, query);// se trimite interogarea
				
				ShowPlayerDialog(playerid, DIALOG_EMAIL, DIALOG_STYLE_INPUT, "Email", "Ce email ai?", "OK", "");// il timitem la dialogul de email
			}
		}

Acum adăugăm şi dialogul de email:

case DIALOG_EMAIL:
		{
			if(response)
			{
				if(strlen(inputtext) < 10 || strlen(inputtext) > 100)// strlen obtine lungimea de string. Daca mesajul introdus in caseta(emailul) este mai mic de 10 caractere sau mai mare de 100 caractere
						return ShowPlayerDialog(playerid, DIALOG_EMAIL, DIALOG_STYLE_INPUT, "Email", "Ce email ai?\nTrebuie sa fie intre 10 si 100 caractere!", "OK", "");// ii returneaza acelasi dialog
						
				strmid(P_Data[playerid][pEmail],inputtext, 0, strlen(inputtext), 100);// strmid obtine lungimea unui string.
				// in acest caz lungimea este introdusa in pEmail, adica P_Data[playerid][pEmail] = inputtext, dar va da eroare, asa ca ne folosim de strmid.
				
				mysql_format(handle, query, sizeof(query), "UPDATE `conturi` SET `Email`='%s' WHERE `Nume`='%e'", P_Data[playerid][pEmail], GetName(playerid));// se face update la baza de date a playerului
				mysql_query(handle, query);// se trimite mesajul catre baza de date.
				
				P_Data[playerid][pRegisterStep] = 3;
				
				mysql_format(handle, query, sizeof(query), "UPDATE `conturi` SET `RegisterStep`='%d' WHERE `Nume`='%e'", P_Data[playerid][pRegisterStep], GetName(playerid));// se updateaza
				mysql_query(handle, query);// se trimite interogarea
				
				ShowPlayerDialog(playerid, DIALOG_REFFERAL, DIALOG_STYLE_INPUT, "Refferal", "Te-a adus cineva pe server?", "OK", "SKIP");// il timitem la dialogul de refferal
			}
		}

Iar ultimul dialog, cel de refferal

case DIALOG_REFFERAL:
		{
			new rows, fields;
			if(response)// primul buton
			{
				mysql_format(handle, query, sizeof(query), "SELECT * FROM `conturi` WHERE `Nume` = '%e'",inputtext);// selecteaza numele din baza de date
				mysql_query(handle, query);// se trimite interogarea catre baza
				
				cache_get_data(rows, fields);// definim randurile si domeniile
				
				if(rows)// daca acel player are cont(are randuri in baza de date)
				{
					strmid(P_Data[playerid][pRefferal],inputtext,0,strlen(inputtext),25);// i se seteaza refferal-ul
					
					mysql_format(handle, query, sizeof(query), "UPDATE `conturi` SET `Refferal`='%e' WHERE `Nume`='%e'", P_Data[playerid][pRefferal], GetName(playerid));// se updateaza refferalul playerului
					mysql_query(handle, query);// se trimite interogarea
					
					
					P_Data[playerid][pRegisterStep] = 4;
					
					mysql_format(handle, query, sizeof(query), "UPDATE `conturi` SET `RegisterStep`='%d' WHERE `Nume`='%e'", P_Data[playerid][pRegisterStep], GetName(playerid));// se updateaza
					mysql_query(handle, query);// se trimite interogarea
				}
				else// daca nu are cont(nu i se gaseste randuri in baza de date)
				{
					ShowPlayerDialog(playerid, DIALOG_REFFERAL, DIALOG_STYLE_INPUT, "Refferal", "Cine te-a adus pe server?", "OK", "SKIP");// ii da din nou dialogul cu refferal
				}
				
			}
			if(!response)// al 2-lea buton
			{
				SendClientMessage(playerid,-1,"Bine, deci nimeni nu te-a adus!");
				
				P_Data[playerid][pRegisterStep] = 4;
				mysql_format(handle, query, sizeof(query), "UPDATE `conturi` SET `RegisterStep`='%d' WHERE `Nume`='%e'", P_Data[playerid][pRegisterStep], GetName(playerid));// se updateaza
				mysql_query(handle, query);// se trimite interogarea
				
				SpawnPlayer(playerid);// ii da spawn
			}
		}

Acum mergem la OnLogin şi punem următoarele verificări :                 Acestea vor verifică dacă ai parcurs fiecare etapă a register-ului.

if(P_Data[playerid][pRegisterStep] == 0)
            return ShowPlayerDialog(playerid, DIALOG_VARSTA, DIALOG_STYLE_INPUT, "Varsta", "Ce varsta doresti sa aiba caracterul?", "OK", "");
            
    if(P_Data[playerid][pRegisterStep] == 1)
            return ShowPlayerDialog(playerid, DIALOG_SEX, DIALOG_STYLE_MSGBOX, "Sex", "Ce sex doresti sa aiba caracterul?", "Masculin", "Feminin");
            
    if(P_Data[playerid][pRegisterStep] == 2)
            return ShowPlayerDialog(playerid, DIALOG_EMAIL, DIALOG_STYLE_INPUT, "Email", "Ce email ai?", "OK", "");
            
    if(P_Data[playerid][pRegisterStep] == 3)
            return ShowPlayerDialog(playerid, DIALOG_REFFERAL, DIALOG_STYLE_INPUT, "Refferal", "Cine te-a adus pe server?", "OK", "SKIP");

Mergem tot la OnLogin şi la verificare if(rows) punem:

 

if(rows)
    {
        //deci daca are randuri
        P_Data[playerid][pParola] = cache_get_field_content(0, "Parola",temporar);
        P_Data[playerid][pID] = cache_get_field_content_int(0, "ID");
        //extragem din baza de date urmatoarele:
        P_Data[playerid][pVarsta] = cache_get_field_content_int(0, "Varsta");
        P_Data[playerid][pSex] = cache_get_field_content_int(0, "Sex");
        P_Data[playerid][pEmail] = cache_get_field_content(0, "Email",temporar);
        P_Data[playerid][pRefferal] = cache_get_field_content(0, "Refferal",temporar);
        P_Data[playerid][pRegisterStep] = cache_get_field_content_int(0, "RegisterStep");
        SpawnPlayer(playerid);
    }

Acum trebuie să mergem în localhost/phpmyadmin şi să decurgem următorii paşi:

sC7LFl7.jpg?1sC7LFl7.jpg?1

https://i.imgur.com/82DsT6e.jpg?182DsT6e.jpg?1

https://i.imgur.com/LU9qJAU.jpg?1LU9qJAU.jpg?1

Mulţumesc pentru atenţie! Dacă ţi-a fost de folos nu uită să dai +1 rep la topic. :)

Edited by WiDuAlK
Rezolvare erori.
  • Upvote 12
Link to comment
Share on other sites

MySQL e mai greu de utilizat, poate nu vrea baiatu sa se complice :))

​Mie mi se pare mai usor, sincer, dar na fiecare cu parerea lui. Eu prin tutoriale incerc sa arat modul de gandire mysql, pentru ca odata inteles modul de gandire, iti este mai usor sa il folosesti, si nu ti se pare mai greu. Eu initial vroiam sa invat dini, dar erau toate sistemele de register stricate, asa ca am incercat sa invat mysql si in vro 2 luni am invatat destule despre el, si am zis ca e mult mai ok sa raman la mysql decat la celelalte pentru simplu fapt ca mysql e de viitor in toate domeniile IT

  • Upvote 2
Link to comment
Share on other sites

Intradevar,mysql e foarte bun.Poti accesa baza de date de exemplu dintr-o aplicatie Android sau IOS.

Sqlite-ul are si el partile lui bune :) De exemplu ,aplicatiile Android folosesc SQLite in majoritatea cazurilor  cand vine vorba de jocuri sau aplicatii gen WhatsApp (unde poti vedea mesajele trimise fara conexiune la internet ) deoarece este mult mai sigur decat MySql care este accesat extern,necesitand o conexiune de internet....In legatura cu serverele de SA:MP,este mult mai accesibil.Baza de date este in format .db(o poti face in ScriptFiles) si o poti accesa folosind SQLiteBrowser modificand orice cu usurinta deci nu aveti nevoie neaparat de conexiune la internet.Back-up-ul e mult mai simplu ca la MySql:copiezi fisierul ( .db ) si gata :D  + Nu necesita parola pentru accesarea ei.

 

 

 

Link to comment
Share on other sites

  • 1 month later...
  • 3 months later...
  • 2 weeks later...

C:\Users\Zydrax\Desktop\new\pawno\darois.pwn(371) : error 017: undefined symbol "rows"
C:\Users\Zydrax\Desktop\new\pawno\darois.pwn(373) : error 017: undefined symbol "rows"
C:\Users\Zydrax\Desktop\new\pawno\darois.pwn(482) : error 017: undefined symbol "rows"
C:\Users\Zydrax\Desktop\new\pawno\darois.pwn(485) : error 017: undefined symbol "temporar"
C:\Users\Zydrax\Desktop\new\pawno\darois.pwn(490) : error 017: undefined symbol "temporar"
C:\Users\Zydrax\Desktop\new\pawno\darois.pwn(491) : error 017: undefined symbol "temporar"

 

Acestea imi da la compliare...

 

Edited by david1995
Link to comment
Share on other sites

  • 3 weeks later...
  • 2 months later...
  • 2 weeks later...
  • 1 month later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more details you can also review our Terms of Use and Privacy Policy.