Jump to content

[TUTORIAL] Login/Register pe baza [DINI]


TedyYy.

Recommended Posts

Salutare la toti. Bine ati venit la primul meu tutorial pe acest site, azi va voi invata cum sa faceti un Login/Register mai "complex". Am vazut ca multi fug de MySQL fiindca li se par foarte greu . Eu am pregatit unul pe include-ul [DINI], iar acest include puteti sa-l descarcati de aici.

Sa incepem.

Pentru inceput vom aduga cele doua include-uri

Citat

/*Credite : TedyYy. , Tutorial Login/Register Sa-mp.Ro*/

#include <a_samp>
#include <dini>

Ca in orice login/register ne trebuie niste enum-uri, haideti sa le facem.

Avem enum-uri la Dialoguri

Citat

enum
{
    DIALOG_REGISTER, //dialog de inregistrare
    DIALOG_LOGIN,//dialog de logare
    DIALOG_AGE,//dialog de varsta
    DIALOG_SEX,//dialog de sex
    DIALOG_EMAIL,//dialog de email
    DIALOG_FINISH// ultimul dialog(dialog finala)
}

Avem enum-uri si la cont

Citat

enum pInfo
{
    pLogged,// cu el verificam daca este conectat sau nu playerul pe server
    pPass,
    pAge,
    pSex,
    pEmail
}

new PlayerInfo[MAX_PLAYERS][pInfo]; // Aici se regasesc toate datele despre cont [Parola, Varsta, Sex ,Email ..etc] iar acestea se salveaza intr-un fisier cu extensia .ini

Acum avem nevoie sa vedem daca contul exista sau nu exista.   DIALOG_REGISTER - Nu exista cont .. DIALOG_LOGIN - Exista cont

Citat

public OnPlayerConnect(playerid)
{
    new pname[MAX_PLAYER_NAME], path[200];
    GetPlayerName(playerid, pname, sizeof(pname));
    format(path, sizeof(path), "accounts/%s.ini", pname);// Aici am redirectionat datele de la cont sa se salveze in niste fisiere cu extensia .ini , iar aceste fisiere se regasesc in folderul "accounts"
    
    if(dini_Exists(path)) // verificam daca contul exista
    {
        ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "LOGIN: Login Account", "Welcome Back, type in the box below \nPassword on our existing accounts", "Login", "Exit");//Am vazut ca , contul exista , deci am apelat la dialogul cu Login, deoaece are o parola si se poate loga
    }
    else//opusul lui , adica daca contul nu exista
    {
        ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "{FF3333}[1/5]{FFFFFF}REGISTER: Register Account", "Bine ai venit, introdu parola dorita in casuta de mai jos\nPentru a putea sa se creeze un cont in baza noastra de conturi", "Register", "Exit");//Am vazut ca , contul nu exista , deci am apelat la dialogul cu register ca sa se creeze o parola si alte date..
    }
    /*InterpolateCameraPos(playerid, 1662.168823, -1525.083984, 160.861648, 1860.854248, -952.482666, 255.745819, 10000);
    InterpolateCameraLookAt(playerid, 1662.083984, -1520.090942, 160.611755, 1858.182006, -956.270141, 253.871215, 10000);*/ //Puteti sa le puneti doar daca doriti ca serverul sa fie mai stralucitor(frumos)
    return 1;
}

La "InterlopateCameraPos" si la "InterlopateCameraLookAt" puteti sa puneti daca vreti. -Cand se conecteaza playerul pe server , ii se va misca camera.

Dupa ce am facut si asta vom merge la "public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])" Si vom crea urmatoarele Dialoguri --> "DIALOG_REGISTER", "DIALOG_AGE", "DIALOG_SEX", "DIALOG_EMAIL", "DIALOG_FINISH" si "DIALOG_LOGIN"

1.DIALOG_REGISTER

Citat

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    new pname[MAX_PLAYER_NAME], path[200];
    GetPlayerName(playerid, pname, sizeof(pname));
    format(path, sizeof(path), "accounts/%s.ini", pname);
    
    switch(dialogid)
    {
        case DIALOG_REGISTER:
        {
            if(!response) return Kick(playerid); //Daca apasa butonul "cancel" sau apasa tasta "ESC" el va primi kick automat
            if(response)//Daca apasa primul buton se vor intampla urmatoarele minuni
            {
                new pwlength = strlen(inputtext);//cream new-ul
                if(pwlength > 4)// parola trebuie sa fie mai mare de 4 caractere!
                {
                    SendClientMessage(playerid, COLOR_SERVER, "");
                    SendClientMessage(playerid, COLOR_SERVER, "{CC0000}SERVER: {FFFFFF}Parola salvata");
                    dini_Create(path);//se creaza path-ul
                    dini_Set(path, "Password", inputtext);//Se seteaza linia "Password" in fisierul %s.ini
                    ShowPlayerDialog(playerid, DIALOG_AGE, DIALOG_STYLE_INPUT, "{FF3333}[2/5]{FFFFFF}AGE: Age Account", "Introdu varsta caracterului tau!!", "Next", "Exit");//Aici am pus DIALOG_AGE, pentru ca atunci cand apasa primul buton de la register sa ii dea direct acest dialog..
                }
                else
                {
                    ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "{FF3333}[1/5]{FFFFFF}REGISTER: Register Account", "Tasteaza parola in casuta de mai jos pentru a te inregistra\nParola trebuie sa aibe mai mult de 4 caractere!", "Register", "Exit");
                }
            }
        }

2.DIALOG_AGE - Varsta

Citat

case DIALOG_AGE: //Dialog-Varsta
        {
            if(!response) return Kick(playerid); //Daca apasa butonul "cancel" sau apasa tasta "ESC" el va primi kick automat
            if(response)//Daca apasa primul buton se vor intampla urmatoarele minuni 
            {
                new age = strval(inputtext);//cream new-ul
                if(age < 6 || age > 35)     // varsta trebuie sa fie cuprinsa 6 si 35 de ani mai bine zis, sa nu fie mai mica de 6 si sa nu fie mai mare de 35 de ani.
                return ShowPlayerDialog(playerid, DIALOG_AGE, DIALOG_STYLE_INPUT, "{FF3333}[2/5]{FFFFFF}AGE: Age Account", "Introdu varsta caracterului tau!!\nVarsta trebuie sa fie intre [6] si [35] de ani", "Next", "Exit");//Aici ii precizeaza de la cati ani pana la cati ani sa fie varsta..
                {
                    new string[120];
                    SendClientMessage(playerid, COLOR_SERVER, "");
                    format(string, sizeof(string), "{CC0000}SERVER: {FFFFFF}Varsta setata la %s ani", inputtext);
                    SendClientMessage(playerid, 0xFFFFFF, string);
                    dini_Create(path);//se creaza path-ul
                    dini_Set(path, "Varsta", inputtext); //Se seteaza linia "Varsta" in fisierul %s.ini
                    PlayerInfo[playerid][pAge] = age;// Aici pAge = age, mai explicit pAge = cu numarul scris in casuta de Varsta adica , pAge = 15 sa zicem..
                }
            }    
            else
            {    
                ShowPlayerDialog(playerid, DIALOG_AGE, DIALOG_STYLE_INPUT, "{FF3333}[2/5]{FFFFFF}AGE: Age Account", "Introdu varsta caracterului tau!!\nVarsta trebuie sa fie intre [6] si [35] de ani", "Next", "Exit");//Aici ii precizeaza de la cati ani pana la cati ani sa fie varsta..
            }
            
        }

3.DIALOG_SEX -Sex-ul caracterului

Citat

case DIALOG_SEX:
        {   
            if(response)//primul buton , se intampla urmatoarele chestii
            {
                new string[120];
                SendClientMessage(playerid, COLOR_SERVER, "");
                format(string, sizeof(string), "{CC0000}SERVER: {FFFFFF}Sex-ul caracterului tau este Masculin");
                SendClientMessage(playerid, 0xFFFFFF, string);
                dini_Create(path);//se creaza path-ul
                dini_Set(path, "Sex", "0");//Se seteaza linia "Sex" in fisierul %s.ini
                ShowPlayerDialog(playerid, DIALOG_EMAIL, DIALOG_STYLE_INPUT, "{FF3333}[4/5]{FFFFFF}EMAIL: Email Account", "Introdu email-ul tau pe care il folosesti", "Next", "Exit");//Aici am pus DIALOG_EMAIL, pentru ca atunci cand apasa primul buton de la dialog_age sa ii dea direct acest dialog..
                SetSpawnInfo(playerid, 0, 58, 1081.3278,-1702.0394,13.5469,182.3852, 0, 0, 0, 0, 0 ,0);//Setam spawn-ul playerului cu tot cu skin
            }
            if(!response) 
            {
                new string[120];
                SendClientMessage(playerid, COLOR_SERVER, "");
                format(string, sizeof(string), "{CC0000}SERVER: {FFFFFF}Sex-ul caracterului tau este Feminin");
                SendClientMessage(playerid, 0xFFFFFF, string);
                dini_Create(path);//se creaza path-ul
                dini_Set(path, "Sex", "1");//Se seteaza linia "Sex" in fisierul %s.ini
                ShowPlayerDialog(playerid, DIALOG_EMAIL, DIALOG_STYLE_INPUT, "{FF3333}[4/5]{FFFFFF}EMAIL: Email Account", "Introdu email-ul tau pe care il folosesti", "Next", "Exit");
                SetSpawnInfo(playerid, 0, 56, 1081.3278,-1702.0394,13.5469,182.3852, 0, 0, 0, 0, 0 ,0);//Setam spawn-ul playerului cu tot cu skin
            }
        }    

4.DIALOG_EMAIL - Email-ul

Citat

case DIALOG_EMAIL:
        {
            if(!response) return Kick(playerid); //Daca apasa butonul "cancel" sau apasa tasta "ESC" el va primi kick automat
            if(response)//Daca apasa primul buton se vor intampla urmatoarele minuni
            {
                new email = strlen(inputtext);// cream new-ul
                if(email > 4)//email-ul trebuie sa fie mai mare de 4 caractere
                {
                    new string[120];
                    SendClientMessage(playerid, COLOR_SERVER, "");
                    format(string, sizeof(string), "{CC0000}SERVER: {FFFFFF}Email-ul tau este %s", inputtext);
                    SendClientMessage(playerid, 0xFFFFFF, string);
                    dini_Create(path);//se creaza path-ul
                    dini_Set(path, "Email", inputtext);//Se seteaza linia "Email" in fisierul %s.ini
                    ShowPlayerDialog(playerid, DIALOG_FINISH, DIALOG_STYLE_MSGBOX, "{FF3333}[5/5]{FFFFFF}FINISH: Finish Step", "Felicitari, te-ai inregistrat cu succes pe server", "Finish", "");//Aici am pus DIALOG_FINISH, pentru ca atunci cand apasa primul buton de la dialog_email sa ii dea direct acest dialog..
                }
                else
                {
                    ShowPlayerDialog(playerid, DIALOG_EMAIL, DIALOG_STYLE_INPUT, "{FF3333}[4/5]{FFFFFF}EMAIL: Email Account", "Introdu email-ul tau pe care il folosesti. Email-ul trebuie sa aiba mai mult de 4 caractere", "Next", "Exit");//DIALOG_EMAIL mai detaliat[mai mare de 4 caractere]
                }
            }
        }

5.DIALOG_FINISH - Final de inregistrare

Citat

case DIALOG_FINISH:
        {
            if(!response) return Kick(playerid); //Daca apasa butonul "cancel" sau apasa tasta "ESC" el va primi kick automat
            if(response)//Daca apasa primul buton se vor intampla urmatoarele minuni
            {
                new name[MAX_PLAYER_NAME], string[24+MAX_PLAYER_NAME];
                GetPlayerName(playerid, name, sizeof(name));
                SendClientMessage(playerid, COLOR_SERVER, "");
                SendClientMessage(playerid, COLOR_SERVER, "");
                SendClientMessage(playerid, COLOR_SERVER, "");
                SendClientMessage(playerid, COLOR_SERVER, "");
                SendClientMessage(playerid, COLOR_SERVER, "");
                SendClientMessage(playerid, COLOR_SERVER, "");
                SendClientMessage(playerid, COLOR_SERVER, "");
                SendClientMessage(playerid, COLOR_SERVER, "");
                SendClientMessage(playerid, COLOR_SERVER, "");
                SendClientMessage(playerid, COLOR_SERVER, "");
                SendClientMessage(playerid, COLOR_SERVER, "");
                SendClientMessage(playerid, COLOR_SERVER, "");
                SendClientMessage(playerid, COLOR_SERVER, "");
                SendClientMessage(playerid, COLOR_SERVER, "");
                SendClientMessage(playerid, COLOR_SERVER, "");
                SendClientMessage(playerid, COLOR_SERVER, "");
                format(string, sizeof(string), "SUCCES: You have logged with name '%s'", name);
                SendClientMessage(playerid, 0x999999, string);
                SpawnPlayer(playerid);//Spawneaza playerul la locul lui[SetSpawnInfo]
            }
        }    

6.DIALOG_LOGIN - Login-ul

Citat

case DIALOG_LOGIN:
        {
            if(!response) return Kick(playerid); //Daca apasa butonul "cancel" sau apasa tasta "ESC" el va primi kick automat
            if(response)//Daca apasa primul buton se vor intampla urmatoarele minuni
            {
                new pwlength = strlen(inputtext);
                if(pwlength > 4)//parola mai mare de 4 caractere
                PlayerInfo[playerid][pSex] = 0; // pSex = 0 - este masculin
                {
                    SetSpawnInfo(playerid, 0, 58, 1081.3278,-1702.0394,13.5469,182.3852, 0, 0, 0, 0, 0 ,0);//Alege skin-ul si spawn-ul
                }
                PlayerInfo[playerid][pSex] = 1; // pSex = 1 - este feminin
                {
                    SetSpawnInfo(playerid, 0, 56, 1081.3278,-1702.0394,13.5469,182.3852, 0, 0, 0, 0, 0 ,0);//Alege skin-ul si spawn-ul
                }
                
                {
                    new pw[200];
                    format(pw, sizeof(pw), "%s", dini_Get(path, "Password"));
                    if(strcmp(inputtext, dini_Get(path, "Password"), true))//Aceasta comanda este foarte importanta deoarece , acesta verifica daca parola este corecta, adica daca este acceasi ca la register
                    return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Password Incorrected", "Introdu parola corecta a contului tau", "Login", "Exit");// Ii da dialogul cu parola incorecta
                    {
                        PlayerInfo[playerid][pLogged] = 1;// Player logat pe server pLogged = 1 - logat
                        PlayerInfo[playerid][pAge] = dini_Int(path, "Age");//Verifica varsta
                        PlayerInfo[playerid][pSex] = dini_Int(path, "Sex");//Verifica Sex
                        PlayerInfo[playerid][pEmail] = dini_Int(path, "Email");//Verifica Email
                        SpawnPlayer(playerid);// Spawneaza player
                    }
                    return 1;
                }
            }
        }
    }
    return 1;
}

Acum ca am terminat cu dialoguri-le si le-am creat pe toate vom trece la ultima etapa, si aceea este 

Citat

public OnPlayerDisconnect(playerid, reason)
{
    new pname[MAX_PLAYER_NAME], path[200];
    GetPlayerName(playerid, pname, sizeof(pname));
    format(path, sizeof(path), "/accounts/%s.ini", pname);

    PlayerInfo[playerid][pLogged] = 0;// Player delogat pLogged = 0 - delogat
}

Asta a fost tutorialul , este primul meu turorial si sper ca va placut mult

Daca am avut greseli de ortografie sau greseli in script nu ezitati sa lasa-ti un reply . Multumesc

Nu uitati - Tutorial 100% creat de mine ,

Nu uitati - Daca va placut tutorialul puteti da un +1

Edited by TedyYy.
  • Upvote 4
Link to comment
Share on other sites

Frumos tutorial, daca e facut de tine bravo, nu inteleg de ce lumea alege ini inloc de mysql, ini este atat de invechit depasit si atat de limitat, doar pentru ca nu stiu sa instaleze xammp si sa insereze baza de date prefera sa treaca la ini.

Sper sa ii ajute si  mai fa tutoriale, nu numai despre ini despre orice crezi tu ca poti stii si nu e mai este postat deja

  • Upvote 1

 

    __  ____      __           
   /  |/  (_)____/ /____  _____
  / /|_/ / / ___/ __/ _ \/ ___/
 / /  / / (__  ) /_/  __/ /    
/_/  /_/_/____/\__/\___/_/     
SERVICII SCRIPTING DE CALITATE
Pagina     Scripting     pawn
Link to comment
Share on other sites

10 hours ago, Mister said:

Frumos tutorial, daca e facut de tine bravo, nu inteleg de ce lumea alege ini inloc de mysql, ini este atat de invechit depasit si atat de limitat, doar pentru ca nu stiu sa instaleze xammp si sa insereze baza de date prefera sa treaca la ini.

Sper sa ii ajute si  mai fa tutoriale, nu numai despre ini despre orice crezi tu ca poti stii si nu e mai este postat deja

 

  • Upvote 1

Retras

Link to comment
Share on other sites

Da este facut de mine si o sa mai fac tutoriale despre altele , haide sa-ti explic si de ce nu inteleg mysql. Ei sigur stiu sa instaleze XAMPP , dar cand vad ca trebuie sa faca coloane , comenzi , query si multe altele , trec direct pe dini sau pe SQLite, deci problema grava este ca : multi nu vor sa invete . Multumesc mult pentru +1

-Mai astept comentarii despre tutorial.

Edited by TedyYy.
Link to comment
Share on other sites

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.