Jump to content

[BUD]Cum sa creezi un Register/Login System si nu numai


burnfire

Recommended Posts

                                                      BUD Register/Login System

Salutare SA:MP Romania!Astazi am sa va arat cum sa creati un Register/Login folosind BUD(Blaising User Database) creat de catre Slice care se bazeaza pe SQL.

BUD il puteti gasi aici

Acest tutorial v-a fi compus din mai multe parti:

l.Introducerea si invatare BUD:

2.Login dialog si verificarea parolelor

3.O simpla comanda de admin

Sa incepem:

l:

1.Ne ducem la OnGameModeInit si punem urmatorul cod explicat:

[pawn]public OnGameModeInit()

{

  BUD::Setting(opt.Database,"Database.db"); //Acesta este numele database,care v-a fi creata in scriptfiles

    BUD::Setting(opt.Asynchronous,false); //Aceasta setare tine de performanta,dar,daca ai vre-o pana de curent,sunt sanse mai mari sa se piarda date daca este setata pe true

    BUD::Setting(opt.KeepAliveTime,1000); //Timpul dupa care se inchide data de baze de la ultima utilizare

    BUD::Setting(opt.CheckForUpdates,true); //Verifica daca sunt update-uri(pe site-ul lui Slice)

    BUD::Initialize(); //Porneste BUD pentru a face actiunile de mai jos

    //Acestea sunt numele unor coloane care v-or fi create in tabelul `Tabel` in baza de date care poarta numele de mai sus...

    BUD::VerifyColumn("Admin",BUD::TYPE_NUMBER);//Verifica daca coloana "Admin" exista,daca nu,o v-a crea

    BUD::VerifyColumn("VIP",BUD::TYPE_NUMBER);//La fel si aici

    BUD::VerifyColumn("Cash",BUD::TYPE_NUMBER);//Si aici la fel

    BUD::VerifyColumn("Score",BUD::TYPE_NUMBER);//Si aici

    BUD::VerifyColumn("Muted",BUD::TYPE_NUMBER);//Si aici

    BUD::VerifyColumn("Warns",BUD::TYPE_NUMBER);//Si aici

    return 1;

}[/pawn]

2.Cream un enum pentru a transporta datele prin FS:

[pawn]enum bInfo //Cream enumul

{

Admin,//Stocam Admin Levelul

VIP,//Stocam VIP levelul

Cash,//Stocam cash-ul

Score,//Stocam score-ul

Warns,//Stocam warnurile

Muted//Stocam daca a primit mute

}

new PInfo[MAX_PLAYERS][bInfo];[/pawn]

3.Creeam tot atatea varibile pentru a le folosi in citirea informatiilor si,atribuirea cu variabilele din enumul de mai sus:

[pawn]new _Admin,_VIP,_Cash,_Score,_Warns,_Muted; //Cream variabilele necesare citirii datelor din DB.[/pawn]

5.Ne ducem la OnPlayerRequestClass si scriem urmatorul cod explicat:

[pawn]if(!BUD::IsNameRegistred(GetName(playerid))

{

ShowRegisterDialog(playerid);

}

else

{

ShowLoginDialog(playerid);

}[/pawn]

6.Introducem undeva la sfarsitul FS-ului urmatoarele Stock-uri:

[pawn]

#define REGISTER 0

#define LOGIN 1

stock GetName(playerid)

{

    new pName[MAX_PLAYER_NAME];//Variabila sa scoatem numele

    GetPlayerName(playerid,pName,sizeof(pName));//Extragem numele

    return pName;//returnam numele jucatorului,care a fost extras

}

stock ShowRegisterDialog(playerid)

{

    ShowPlayerDialog(playerid,REGISTER,DIALOG_STYLE_PASSWORD,"Register","Bine ai venit!\nTe rugam sa te inregistrezi","Ok","Kick");

    return 1;

}

stock ShowLoginDialog(playerid)

{

    ShowPlayerDialog(playerid,LOGIN,DIALOG_STYLE_PASSWORD,"Login","Bine ai revenit!\nTe rugam sa te loghezi","Ok","Kick");

    return 1;

}

[/pawn]

7.Ne intoarcem privirile la callback-ul OnDialogResponse:

[pawn]public OnDialogResponse(playerid,dialogid,response,inputtext[ ],listitem)

{

    new uid = BUD::GetNameUID(GetName(playerid));

    switch(dialogid)

  {

    case REGISTER:

  {

    if(!response) return Kick(playerid); //Daca apasa pe Kick,ii v-a da Kick

    if(strlen(inputtext) < 3 || strlen(inputtext) > 20) return ShowRegisterDialog(playerid); //Daca parola este mai mica de 3 caractere sau  mai mare de 20 de caractere,ii v-a arata din nou dialogul de register!

    if(BUD::RegisterName(GetName(playerid),inputtext)) //Inregistreaza numele in baza de date

    {

    BUD::MultiSet( iUID, "iiiiii", //Ca la sscanf,arata din ce este format MultiSet-ul

    "Cash",PInfo[playerid][Cash],

    "Score",PInfo[playerid][score],

    "Admin",PInfo[playerid][Admin],

    "VIP",PInfo[playerid][VIP],

    "Muted",PInfo[playerid][Muted],

    "Warns",PInfo[playerid][Warns]

    );

    SendClientMessage(playerid,-1,"Te-ai inregistrat cu succes!Acum te vei loga!");

    ShowLoginDialog(playerid);

    }

    }

    }

    return 1;

}[/pawn]

ll:To Be Continued

Link to comment
Share on other sites

Anakin" post="144379" timestamp="1370165109"]

GetName serios ? Numai ii la moda PlayerName sau PlayerName2 din ladmin4v2 ? :]]

Fiecare face cum ii place.

Ala ii sa afli despre BUD:,introducerea,ca sa zic asa!Teoretic!

Asta ii sa il puc in Practica!Practic!:))

"Rock" a explicat majoritatea functiilor BUD.Si daca citesti mai atent poti sa faci un sistem de login/register si cu ajutorul tutorialului ala.

plQ8h9B.jpg

Link to comment
Share on other sites

Partea a doua

1.Ne ducem la callback-ul OnDialogResponse,si introducem urmatorul cod explicat:[pawn]

    new iUID = BUD::GetNameUID(GetName(playerid)); //Luam id-ul BUD al playerului respectiv

    switch (dialogid)//Folosim instructiunea switch pentru o schimbare mai rapida

    {

    case Register: //Dialogul Register

    {

    if(!response) return Kick(playerid);//Daca nu raspunde,primeste kick

    if(strlen(inputtext) < 3 || strlen(inputtext) > 20 || isnull(inputtext)) return ShowRegisterDialog(playerid);//Daca parola e prea mica/prea mare ii v-a trimite un mesaj

    if(BUD::RegisterName(GetName(playerid),inputtext)) //Inregistreaza numele in baza de date

    {

    BUD::MultiSet( iUID, "iiiiii",

    "Cash",PInfo[playerid][Cash],

    "Score",PInfo[playerid][score],

    "Admin",PInfo[playerid][Admin],

    "VIP",PInfo[playerid][VIP],

    "Muted",PInfo[playerid][Muted],

    "Warns",PInfo[playerid][Warns]

    );//Introducem in tabel variabilele

    }

    SendClientMessage(playerid,0x00FF00FF,"Te-ai inregistrat cu succes!"); //Dam de stire ca s-a inregistrat

    PlayerPlaySound(playerid,1057,0,0,0); //Aici nu este obligatoriu,dar da un aspect sonor special :))

    ShowLoginDialog(playerid); //Ii aratam dialogul de login

    }

    case Login: //Dialogul de login

    {

    if(!response) return Kick(playerid); //Daca nu raspunde,primeste kick

    if(strlen(inputtext) < 3 || strlen(inputtext) > 20 || isnull(inputtext)) return ShowLoginDialog(playerid); //Daca parola este prea mica / prea mare,ii va arata incao data dialogul de login

    if( BUD::CheckAuth( GetName( playerid ), inputtext )) //Veriicam daca parola introdusa este corecta

    {//Daca este corecta

    BUD::MultiGet(iUID,"iiiiii",

    "Cash",_Cash,

    "Score",_Score,

    "Admin",_Admin,

    "VIP",_VIP,

    "Muted",_Muted,

    "Warns",_Warns

    );//Extragem variabilele din tabel

    PInfo[playerid][Cash] = _Cash;//Le asociam cu enumul nostru

    PInfo[playerid][score] = _Score;

    PInfo[playerid][Admin] = _Admin;

    PInfo[playerid][VIP] = _VIP;

    PInfo[playerid][Muted] = _Muted;

    PInfo[playerid][Warns] = _Warns;

    ResetPlayerMoney(playerid); //Resetam banii jucatorului

    GivePlayerMoney(playerid,_Cash); //Ii redam banii din cont

    SetPlayerScore(playerid,_Score); //Ii setam scorul care il avea

    PlayerPlaySound(playerid,1057,0,0,0);//Si aceasta linie NU este obligatorie

    Date = SetTimer("Data",5000,true); //Aceasta v-a fi explicat la pasul urmator

    SendClientMessage(playerid,0x00FF00FF,"Te-ai logat cu succes!");//Ii dam de stire ca s-a logat cu succes!

    }

    else

    {//Daca parola introdusa este incorecta

    SendClientMessage(playerid,0xFF0000FF,"Ai introdus o parola incorecta!Te rugam sa mai incerci!");//Ii dam de stireca parola introdusa este incorecta

    ShowLoginDialog(playerid);//Ii aratam dialogul de login

    }

    }

    }

    return 1;

}[/pawn]

2.Facem un timer sa ii salveze datele cand se afla pe server!

[pawn]/*Undeva sub include-uri*/

forward Data(playerid);

/*Timerul il avem setat la pasul 1*/

/*Undeva in josul scriptului...*/

public Data(playerid)

{

    PInfo[playerid][Cash] = _Cash;//Le asociam cu enumul nostru

    PInfo[playerid][score] = _Score;

    PInfo[playerid][Admin] = _Admin;

    PInfo[playerid][VIP] = _VIP;

    PInfo[playerid][Muted] = _Muted;

    PInfo[playerid][Warns] = _Warns;

    return 1;

}

[/pawn]

Cam aceasta a fost partea a doua a tutorialului nostru!

Link to comment
Share on other sites

  • 3 months 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.