INSIDE RESURSE

Resurse pentru toate jocurile online! samp, csgo, mape, muzica, filme, ps, divertisment, geforce, fzarea, muzica, clan, coduri, cfg, inside, resurse, servere, gata, facute, war, zone, pgl, long, nvid


Nu sunteti conectat. Conectati-va sau inregistrati-va

[Tutorial/SA:MP] Login & Register using Y_INI

Por favor, faça o login para responder

Vezi subiectul anterior Vezi subiectul urmator In jos  Mesaj [Pagina 1 din 1]

#1vendME 

la data de Joi Mai 04, 2017 12:11 am

avatar

Fondator
Fondator
tutorial login & register folosind Y_INI deoarece unii nu vreti sa va complicati cu mysql. Eu am sa va explic pas cu pas ce trebuie sa faceti ca sa va creeati propriul vostru sistem. Acest tutorial include Y_INI si desigur, login & register cu dialoguri.
 
Cerinte pentru a urmarii acest tutorial:
-Sa ai cel putin 16 ani ca sa intelegi macar limbajul de programare
-Sa stii cu ce se papa scriptingul si mai ales pawno
-Sa fii atent la fiecare pas
 
Ce este Y_INI ?
 
Y_INI este un sistem ce citeste si scrie infor###### intr-un timp foarte rapid. De aceea multi apeleaza la acest sistem creeat de Y_LESS.
 
Ce aduce nou acest sistem de reading & writer fata de celelalte ?
 
Y_INI a fost dovedit a fi cel mai rapid cititor de date si cel mai rapid in a scrie o informatie. Dupa cum stim Y_Less este creatorul. 
Inainte de a incepe tutorialul trebuie sa va instalati include-ul [ LINK DOWNLOAD [Trebuie sa fiti inscris si conectat pentru a vedea acest link]. ]. Odata ce ati descarcat fisierul trebuie sa plasati folderul YSI in pawno/include. apoi desigur introduceti in gamemode printre primele linii " #include <YSI\y_ini> ".
 
Acum suntem gata sa incepem primul pas, fiti atenti si nu omiteti niciun pas.
 
Step 1
 
Definim anumite dialoguri ce ne va ajuta sa creeam login si register
 

Cod:
#define DIALOG_REGISTER 1
#define DIALOG_LOGIN 2
#define DIALOG_SUCCESS_1 3
#define DIALOG_SUCCESS_2 4



 
Mai definim niste culori pentru un design mai frumos
 

Cod:
#define COL_WHITE "{FFFFFF}"
#define COL_RED "{F81414}"
#define COL_GREEN "{00FF22}"
#define COL_LIGHTBLUE "{00CED1}"



 
Step 2
 
Vom folosi o enumerare, pentru a stoca variabilele noastre.
 

Cod:
enum pInfo
{
    pPass,
    pCash,
    pAdmin,
    pKills,
    pDeaths
}
new PlayerInfo[MAX_PLAYERS][pInfo];



 
Step 3
 
Acum, vom crea o funcție pentru a încărca datele utilizatorului.
 

Cod:
forward LoadUser_data(playerid,name[],value[]);
public LoadUser_data(playerid,name[],value[])
{
    INI_Int("Password",PlayerInfo[playerid][pPass]);
    INI_Int("Cash",PlayerInfo[playerid][pCash]);
    INI_Int("Admin",PlayerInfo[playerid][pAdmin]);
    INI_Int("Kills",PlayerInfo[playerid][pKills]);
    INI_Int("Deaths",PlayerInfo[playerid][pDeaths]);
    return 1;
}



 
Step 4
 
Acum să creăm o functie de stoc simplu.
 

Cod:
stock UserPath(playerid)
{
    new string[128],playername[MAX_PLAYER_NAME];
    GetPlayerName(playerid,playername,sizeof(playername));
    format(string,sizeof(string),PATH,playername);
    return string;
}



 
Sub stock UserPath adaugati

Cod:
/*Credits to Dracoblue*/
stock udb_hash(buf[]) {
    new length=strlen(buf);
    new s1 = 1;
    new s2 = 0;
    new n;
    for (n=0; n<length; n++)
    {
      s1 = (s1 + buf[n]) % 65521;
      s2 = (s2 + s1)    % 65521;
    }
    return (s2 << 16) + s1;



 
Stocul de mai sus este un simplu "Hasher", și vor fi folosite pentru a codifica parolele utilizatorilor, creditele acordate lui Dracoblue.
 
Step 5
 
Vom folosi acum callback-ul "OnPlayerConnect" pentru a verifica dacă jucătorul este înregistrat sau nu.
 
Cod:
[size=14][/size]
public OnPlayerConnect(playerid)
{
    if(fexist(UserPath(playerid)))
    {
        INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
        ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,""COL_WHITE"Login",""COL_WHITE"Type your password below to login.","Login","Quit");
    }
    else
    {
        ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT,""COL_WHITE"Registering...",""COL_WHITE"Type your password below to register a new account.","Register","Quit");
    }
    return 1;
}


 
Vom folosi funcția nativ "fexist" pentru a căuta fișierul nostru. Parametrii sunt setati să funcționeze pe stoc-ul pe care l-am creat. Dacă fișierul există, veți primi o "Autentificare" de dialog. Dacă nu, veți primi un dialog de registru.
 
Step 6
 
Acum va trebui sa creeam dialogrile pentru login si register
 

Cod:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    switch( dialogid )
    {
        case DIALOG_REGISTER:
        {
            if (!response) return Kick(playerid);
            if(response)
            {
                if(!strlen(inputtext)) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, ""COL_WHITE"Registering...",""COL_RED"You have entered an invalid password.\n"COL_WHITE"Type your password below to register a new account.","Register","Quit");
                new INI:File = INI_Open(UserPath(playerid));
                INI_SetTag(File,"data");
                INI_WriteInt(File,"Password",udb_hash(inputtext));
                INI_WriteInt(File,"Cash",0);
                INI_WriteInt(File,"Admin",0);
                INI_WriteInt(File,"Kills",0);
                INI_WriteInt(File,"Deaths",0);
                INI_Close(File);

                SetSpawnInfo(playerid, 0, 0, 1958.33, 1343.12, 15.36, 269.15, 0, 0, 0, 0, 0, 0);
                SpawnPlayer(playerid);
                ShowPlayerDialog(playerid, DIALOG_SUCCESS_1, DIALOG_STYLE_MSGBOX,""COL_WHITE"Success!",""COL_GREEN"Super! Sistemul tau de login si register merge perfect, dai un relog pt a iti salva datele","Ok","");
            }
        }

        case DIALOG_LOGIN:
        {
            if ( !response ) return Kick ( playerid );
            if( response )
            {
                if(udb_hash(inputtext) == PlayerInfo[playerid][pPass])
                {
                    INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
                    GivePlayerMoney(playerid, PlayerInfo[playerid][pCash]);
                    ShowPlayerDialog(playerid, DIALOG_SUCCESS_2, DIALOG_STYLE_MSGBOX,""COL_WHITE"Success!",""COL_GREEN"You have successfully logged in!","Ok","");
                }
                else
                {
                    ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,""COL_WHITE"Login",""COL_RED"You have entered an incorrect password.\n"COL_WHITE"Type your password below to login.","Login","Quit");
                }
                return 1;
            }
        }
    }
    return 1;
[ltr]


}[/ltr]

 
Step 7
 
Iar acum va trebui sa salvam datele cand jucatorul paraseste serverul
 

Cod:
public OnPlayerDisconnect(playerid, reason)
{
    new INI:File = INI_Open(UserPath(playerid));
    INI_SetTag(File,"data");
    INI_WriteInt(File,"Cash",GetPlayerMoney(playerid));
    INI_WriteInt(File,"Admin",PlayerInfo[playerid][pAdmin]);
    INI_WriteInt(File,"Kills",PlayerInfo[playerid][pKills]);
    INI_WriteInt(File,"Deaths",PlayerInfo[playerid][pDeaths]);
    INI_Close(File);
    return 1;
}



Iar pentru a stoca kill-urile sau death-urile folositi PlayerInfo[killerid][pKills]++;  PlayerInfo[playerid][pDeaths]++; si asa si cu celelalte variabile.
 
Acest tutorial a luat sfarsit. Iar sistemul tau de login si register ar trebui sa functioneze foarte rapid.


_________________

INSIDE RESURSE











http://resurseinside.forumgratuit.ro

Vezi subiectul anterior Vezi subiectul urmator Sus  Mesaj [Pagina 1 din 1]

Por favor, faça o login para responder

Permisiunile acestui forum:
Nu puteti raspunde la subiectele acestui forum