World of Metin

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

View previous topic View next topic Go down

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

Post by Bogdan on Sun Sep 22, 2013 8:24 am

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:
Code:
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;
}
2.Cream un enum pentru a transporta datele prin FS:

Code:
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];
3.Creeam tot atatea varibile pentru a le folosi in citirea informatiilor si,atribuirea cu variabilele din enumul de mai sus:

Code:
new _Admin,_VIP,_Cash,_Score,_Warns,_Muted; //Cream variabilele necesare citirii datelor din DB.
5.Ne ducem la OnPlayerRequestClass si scriem urmatorul cod explicat:
Code:
if(!BUD::IsNameRegistred(GetName(playerid))
{
ShowRegisterDialog(playerid);
}
else
{
ShowLoginDialog(playerid);
}
6.Introducem undeva la sfarsitul FS-ului urmatoarele Stock-uri:

Code:
#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;
}
7.Ne intoarcem privirile la callback-ul OnDialogResponse:

Code:
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);
    }
    }
    }

Bogdan
Membru
Membru

Posts : 50
Reputation : 0
Join date : 22/09/2013

View user profile

Back to top Go down

View previous topic View next topic Back to top


 
Permissions in this forum:
You cannot reply to topics in this forum