burnfire Posted June 1, 2013 Posted June 1, 2013 BUD Register/Login SystemSalutare 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 aiciAcest tutorial v-a fi compus din mai multe parti:l.Introducerea si invatare BUD:2.Login dialog si verificarea parolelor3.O simpla comanda de adminSa 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 LevelulVIP,//Stocam VIP levelulCash,//Stocam cash-ulScore,//Stocam score-ulWarns,//Stocam warnurileMuted//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 1stock 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
[Funky]Anakin Posted June 2, 2013 Posted June 2, 2013 GetName serios ? Numai ii la moda PlayerName sau PlayerName2 din ladmin4v2 ? :]]BUD nu stiu , dar cred ca ii totul ok . Mai mult imi place MySQL si nu trebuie sa faci atat de multe
burnfire Posted June 2, 2013 Author Posted June 2, 2013 Ala ii sa afli despre BUD:,introducerea,ca sa zic asa!Teoretic!Asta ii sa il puc in Practica!Practic!)
Hardwell Posted June 2, 2013 Posted June 2, 2013 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.
[Funky]Anakin Posted June 2, 2013 Posted June 2, 2013 Fiecare face cum ii place."Rock" a explicat majoritatea functiilor BUD.Si daca citesti mai atent poti sa faci un sistem de login/register si cu ajutorul tutorialului ala.Daca ai cap , dar la ce scripteri is acum pe aceasta comunitate nu stiu daca ei vor reusi .... xDDD
burnfire Posted June 4, 2013 Author Posted June 4, 2013 Partea a doua1.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!
burnfire Posted June 5, 2013 Author Posted June 5, 2013 Ii pentru timerul care salveaza datele jucatorilor...
Zzale Posted June 10, 2013 Posted June 10, 2013 Eu spun ca este de folos . Bravo <a href="http://www.game-state.com/93.119.26.26:7777/"><img src="http://www.game-state.com/93.119.26.26:7777/350x20_FFFFFF_FFFFFF_000000_000000.png" alt="www.Game-State.com" style="border-style: none;" /></a>
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now