Jump to content

Cum sa iti faci un sistem de inregistrare/logare pe Y_INI


Recommended Posts

Posted

Salut astazi am decis sa fac un tutorial pentru creerea unui sistem de inregistrare/logare pe Y_INI al 2 lea cel mai bun sistem de salvare existent!

Sa incepem

Pasul 1:

adaugam in capul gamemodului

#include < a_samp >
#include <YSI/y_ini>
Pasul 2: Definim urmatoarele
#define Register 1// id dialog Register (se poate incurca daca aveti alt dialog definit cu 1)
#define Login 2// id dialog Register (se poate incurca daca aveti alt dialog definit cu 1)
#define Sfolder "/Utilizatori/%s.ini" //Folderul unde se va salva
Pasul 3: Facem un nou "enum"
enum pINF
{
   pPass,     pCash,
   pAdmin,   pKills,
   pDeaths
}
new PlayerInfo[MAX_PLAYERS][pINF];
Pasul 4: Punem acest cod la OnPlayerConnect
if(fexist(UserPath(playerid)))//Variabila ce verifica daca exista contul
    {
        INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
        ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,"Login","Scrie parola mai jos pentru a te loga.","Login","Quit");
    }
    else//Functia care spune ca daca contul nu exista acesta se va creea
    {
        ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT,"Registering...","Scrie parola mai jos pentru a creea un cont nou !!","Register","Quit");
    }
Pasul 5: Adaugati la OnPlayerDialogResponse urmatoarele:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    switch( dialogid )// functia care face switch intre dialoguri
    {
        case Register://dialogul de inregistrare
        {
            if (!response) //aceasta functie este in caz ca playerul nu raspunde , daca nu raspunde ii va da automat kick!
               return Kick(playerid);
            if(response)//Aceasta functie daca raspunde ii va crea contul
            {
                if(!strlen(inputtext)) return ShowPlayerDialog(playerid, Register, DIALOG_STYLE_INPUT, "Inregistrare","Tu nu ai introdus nici o parola in casuta.\nScrie parola mai jos pentru a crea un cont nou!.","Register","Quit");//Functia care ii spune ca daca nu introduce o parola nu ii creaza contul
                new INI:File = INI_Open(UserPath(playerid));//Functia care deschide scrierea fisierelor
                INI_SetTag(File,"data");//functia care ii pune tagul la inceputul contului
                INI_WriteInt(File,"Password",udb_hash(inputtext));//functia care salveaza statistica 
                INI_WriteInt(File,"Cash",0);//functia care salveaza statistica 
                INI_WriteInt(File,"Adminl",0);//functia care salveaza statistica 
                INI_WriteInt(File,"Kills",0);//functia care salveaza statistica 
                INI_WriteInt(File,"Deaths",0);//functia care salveaza statistica 
                INI_Close(File);//Functia ce inchide salvarea
                SpawnPlayer(playerid);//Functia ce spawneaza playeru
            }
        }

        case DIALOG_LOGIN:
        {
            if ( !response ) return Kick ( playerid );//aceasta functie este in caz ca playerul nu raspunde , daca nu raspunde ii va da automat kick!
            if( response )Aceasta functie il va lasa pe jucator sa intre pe server si ii va da statisticile inapoi!
            {
                if(udb_hash(inputtext) == PlayerInfo[playerid][parola])//Aici citeste Hashul de la parola
                {
                    INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);// Aici loadeaza 
                    GivePlayerMoney(playerid, PlayerInfo[playerid][money]);//iar aici ii da bani playerului
                }
                else// aceasta functie ii spune ca nu a introdus bine parola sa o mai introduca odata!
                {
                    ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,"Login","Tu ai introdus o parola gresita!.\nScrie parola in casuta de mai jos!!.","Login","Quit");
                }
                return 1;
            }
        }
    }
    return 1;
}
Pasul 6: Punem La OnPlayerDisconnect urmatorul cod
public OnPlayerDisconnect(playerid, reason)
{
    new INI:File = INI_Open(UserPath(playerid));//Functia care deschide salvarea
    INI_SetTag(File,"data");Functia care scrie tagul 
    INI_WriteInt(File,"Cash",GetPlayerMoney(playerid));Functia ce salveaza statsticile
    INI_WriteInt(File,"Admin",PlayerInfo[playerid][pAdmin]);Functia ce salveaza statsticile
    INI_WriteInt(File,"Kills",PlayerInfo[playerid][pKills]);Functia ce salveaza statsticile
    INI_WriteInt(File,"Deaths",PlayerInfo[playerid][pDeaths]);Functia ce salveaza statsticile
    INI_Close(File);Functia ce inchide salvarea
    return 1;
}
Pasul 7: Acum adaugam la OnPlayerDeath
public OnPlayerDeath(playerid, killerid, reason)
{
    PlayerInfo[killerid][pKills]++;//functia ce ii pune kilurile pe +
    PlayerInfo[playerid][pDeaths]++;//functia ce ii pune mortille pe +
    return 1;
}
Pasul 8: Pune urmatoarea functie
forward LoadUser_data(playerid,name[],value[]);//Forwardul functie
public LoadUser_data(playerid,name[],value[])//Functia
{
    INI_Int("Password",PlayerInfo[playerid][pPass]);//Functia ce loadeaza parola
    INI_Int("Cash",PlayerInfo[playerid][pCash]);//Functia ce loadeaza banii
    INI_Int("Admin",PlayerInfo[playerid][pAdmin]);//functia ce loadeaza adminul
    INI_Int("Kills",PlayerInfo[playerid][pKills]);//functia ce salveaza killurile
    INI_Int("Deaths",PlayerInfo[playerid][pDeaths]);//Functia ce salveaza deathurile
    return 1;
}
Pasul 9: Punem Functia de hash Important: creditele ii revin lui 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;
}
Pasul 10: Punem undeva in gamemode functia pentru partita salvari.
stock UserPath(playerid)
{
    new string[128],playername[MAX_PLAYER_NAME];
    GetPlayerName(playerid,playername,sizeof(playername));
    format(string,sizeof(string),Sfolder,playername);
    return string;
}

Cu toate acestea spuse acesta a fost tutorialul de creere a unui sistem de salvare pe Y_INI.

I'm back bitches.

Posted

#define     PATH    		"/Accounts/%s.ini"

Pentru a salva fiecare cont :)

communitylogosml.png

94.23.120.101:7778

Posted

Anakin" post="127918" timestamp="1357203189"]

Bun dar pe SQLite e mai folositor :D

Chiar MYSql ar fii extraordinar daca ai face xD .

Bun si asta 4.5 / 5.0 o.O

Funky sa sti si tu , mai bun decat  Y_INI e doar mysql

PawnFox link=topic=23284.msg127913#msg127913 date=1357200664]

#define     PATH    		"/Accounts/%s.ini"

Pentru a salva fiecare cont :)

Tu nu ai vazut #define Sfolder "/Utilizatori/%s.ini" //Folderul unde se va salva ?

sau face plopu pere ?

In rest sunt multumit de note !

I'm back bitches.

Posted

Funky sa sti si tu , mai bun decat  Y_INI e doar mysql

Tu nu ai vazut #define Sfolder "/Utilizatori/%s.ini" //Folderul unde se va salva ?

sau face plopu pere ?

In rest sunt multumit de note !

Prove it !

Decat sa am un sistem de register / login pe Y_INI Intr-un fisier cu mai multe chestii mai bine folosesc dini decat Y_INI !

Dar folosesc SQLite fiindca arata mai bine si este mai frumos xD

idiots.png
Posted

Anakin" post="127918" timestamp="1357203189"]

Bun dar pe SQLite e mai folositor :D

Chiar MYSql ar fii extraordinar daca ai face xD .

Bun si asta 4.5 / 5.0 o.O

Acum ca ma gandesc se poate sa incerc sa fac un sistem de salvare mysql dar r6 deoarece r7 nu stiu :)),Daca imi iese voi face un tutorial ;)

I'm back bitches.

  • 1 month later...
Posted

imi da eroarea asta :

E:\Intelexe's1.4\samp03csvr_win32\filterscripts\register_login.pwn(58) : error 008: must be a constant expression; assumed zero
la linia asta:
case DIALOG_LOGIN:

va rog ajutatima

Posted

Anakin" post="127966" timestamp="1357230973"]

Decat sa am un sistem de register / login pe Y_INI Intr-un fisier cu mai multe chestii mai bine folosesc dini decat Y_INI !

Dar folosesc SQLite fiindca arata mai bine si este mai frumos xD

Nu vorbii daca nu cunosti.

Daca nu stii sa il folosesti asta nu inseamna ca nu e bun, Y_INI e cel mai bun pentru scrierea si citirea fisierelor.

Si calitatea nu se rezuma in aspect, ai facut vreodata un test de viteza intre ele?

Nu, habar nai ce vorbesti si decat sa faci asa mai bine taci.

Posted

nu am zis ca nu e bun , am intrebat cum rezolv eroarea aia ??

Ti sa parut ca am vorbit cu tine?

Ai gresit cum le-ai asezat pe acolo ca linia aia nu are nici o problema.

Gata cu off-topic ca incep sa dau warn.

  • 8 months later...
  • 2 weeks later...
Posted

Poate posta cineva include-ul ' Y_ini ' va rog ? Nu-l gasesc pe nicaieri..

Singura eroare care mi-o da este ca nu poate gasi Y_ini.

fatal error 100: cannot read from file: "YSI\y_ini"

Posted

acum imi da o alta eroare. Scuzati ca postez aici, dar uitati-va si voi putin aici http://www.sa-mp.ro/forum/index.php?topic=29481.msg153692#new

Multumesc.

  • 3 weeks later...
  • 2 weeks later...
  • 5 months later...
Posted

C:\Users\laceanu cel voinic\Desktop\0 de la nenea George\gamemodes\gamemode.pwn(72) : error 017: undefined symbol "DIALOG_LOGIN"

C:\Users\laceanu cel voinic\Desktop\0 de la nenea George\gamemodes\gamemode.pwn(76) : error 017: undefined symbol "DIALOG_REGISTER"

C:\Users\laceanu cel voinic\Desktop\0 de la nenea George\gamemodes\gamemode.pwn(278) : error 017: undefined symbol "DIALOG_LOGIN"

C:\Users\laceanu cel voinic\Desktop\0 de la nenea George\gamemodes\gamemode.pwn(283) : error 017: undefined symbol "parola"

C:\Users\laceanu cel voinic\Desktop\0 de la nenea George\gamemodes\gamemode.pwn(286) : error 017: undefined symbol "money"

C:\Users\laceanu cel voinic\Desktop\0 de la nenea George\gamemodes\gamemode.pwn(290) : error 017: undefined symbol "DIALOG_LOGIN"

Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase

6 Errors.

Linia 72:        ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,"Login","Scrie parola mai jos pentru a te loga.","Login","Quit");

Linia 76:        ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT,"Registering...","Scrie parola mai jos pentru a creea un cont nou !!","Register","Quit");

Linia 278:        case DIALOG_LOGIN:

Linia 283:                if(udb_hash(inputtext) == PlayerInfo[playerid][parola])//Aici citeste Hashul de la parola

Linia 286:                    GivePlayerMoney(playerid, PlayerInfo[playerid][money]);//iar aici ii da bani playerului

Linia 290:                    ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,"Login","Tu ai introdus o parola gresita!.\nScrie parola in casuta de mai jos!!.","Login","Quit");

Posted

Imi da eroare C:\Users\C.I.P\Desktop\New folder\gamemodes\grandlarc.pwn(14) : fatal error 100: cannot read from file: "YSI/y_ini"          linia  #include <YSI/y_ini>

  • 2 weeks later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • 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.