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:
Mulţumesc pentru atenţie! Dacă ţi-a fost de folos nu uită să dai +1 rep la topic.