Jump to content

Documentare Completa | [BUD]Blazing User Database


Guest Rock

Recommended Posts

In acest topic vei vedea o documentare completa despre sistem-ul BUD. [ Blazing User Database ]

1. Inceputul. Creearea bazei de date si coloanelor

2. Adaugarea si extragerea datelor din baza de date

2: Extragerea si setarea datelor DIRECT din/in baza de date

Functiile care le voi explica:


       

        BUD::Setting( setting[], value )

bool    BUD::Initialize( )

bool    BUD::Exit( )

        BUD::VerifyColumn( column[], type[, default value ] )

bool    BUD::IsNameRegistered( name[] )

bool    BUD::RegisterName( name[], password[] )

        BUD::UnregisterName( name[] )

bool    BUD::CheckAuth( name[], password[] )

        BUD::GetNameUID( name[] )

Float  BUD::GetFloatEntry( uid, entry[] )

        BUD::GetIntEntry( uid, entry[] )

        BUD::GetStringEntry( uid, entry[], &value[][, size ] )

bool    BUD::MultiGet( uid, type definitions, ( entry, &variable )... )

bool    BUD::MultiSet( uid, type definitions, ( entry, value )... )

bool    BUD::SetIntEntry( uid, entry[], value )

bool    BUD::SetFloatEntry( uid, entry[], Float:value )

bool    BUD::SetStringEntry( uid, entry[], value[][, size ] )


Inainte sa includem BUD trebuie sa avem asta.

#define BUD_USE_WHIRLPOOL false // false - daca nu folosim pluginul WHIRLPOOL si true daca il folosim

#define BUD_MAX_COLUMNS 10 // 10 - numarul maxim al columnelor care vor fi permise in baza de date

Dupa ce am definit asta putem include BUD.

#include < BUD >

Acum ca am inclus BUD si avem cateva setari putem sa ne apucam de treaba.

Ne ducem la callback-ul OnGameModeInit(daca este gm) sau OnFilterScriptInit(daca este fs), eu voi face un fs.

public OnFilterScriptInit( )

{

}

Intre acolade adaugam setarile:

BUD::Setting(  opt.Database, "Users.db"  ); // Aici adaugam numele bazei de date care vrem sa o creem.

BUD::Setting(  opt.Asynchronous, true    ); // daca este "true" va fi mai rapid dar in caz ca ai o pana de curent baza de date e posibil sa se corupa

BUD::Setting(  opt.KeepAliveTime, 3000  ); // Baza de date va ramane pornita pentru 3000 ms dupa ce va fii folosita, functia este folosita pentru performanta

BUD::Setting(  opt.CheckForUpdates, true ); // Numele spune totul, verifica daca sunt disponibile update-uri noi.

Dupa setari initializam baza de date.

ATENTIE: Asta trebuie facut inainte sa folosim alte functii ale bazei de date.

BUD::Initialize( );

Asta adaugam sub celelalte setari.

Dupa ce am facut setarile putem incepe sa adaugam coloanele.

BUD::VerifyColumn(  "Money", BUD::TYPE_NUMBER );

Money - Numele coloanei.

BUD::TYPE:

TYPE_NUMBER: Numere (1,2,3, 34343)

TYPE_STRING: String(bla, test, rock)

TYPE_FLOAT  : Float(2.0, 3.2, 34.33)

TYPE_BINARY: Inca nu este suportat, va aparea in urmatoare versiune

Parametrii optionali la VerifyColumn:

BUD::VerifyColumn(  "Money", BUD::TYPE_NUMBER, 50  ); // 50 - parametrul optional, acesta va adauga la inceput valoarea 50 coloanei "Money"

Dupa ce am terminat cu setarile si creearea coloanelor vom inchide baza de date la OnFilterScriptExit sau OnGameModeExit folosind functia:

BUD::Exit( );

La sfarsit scriptul ar trebuii sa arate exact asa:

#include < a_samp >

#define BUD_USE_WHIRLPOOL false

#define BUD_MAX_COLUMNS 10

#include < BUD >

public OnFilterScriptInit( )

{

  BUD::Setting(  opt.Database, "Users.db"  );

BUD::Setting(  opt.Asynchronous, true    );

BUD::Setting(  opt.KeepAliveTime, 3000  );

BUD::Setting(  opt.CheckForUpdates, true );

BUD::Initialize( );

  BUD::VerifyColumn(  "Money", BUD::TYPE_NUMBER  );

// Cu parametrul optional

BUD::VerifyColumn(  "Money",  BUD::TYPE_NUMBER, 50  );

  BUD::VerifyColumn(  "Rank",  BUD::TYPE_STRING, "Newbie"  );

  BUD::VerifyColumn(  "Health", BUD::TYPE_FLOAT, 100.00  );

}

public OnFilterScriptExit( )

{

BUD::Exit( );

}

PS:

Cu timpul voi adauga mai multe detalii deoarece nu am timp sa scriu totul odata.

Link to comment
Share on other sites

Acum trecem la partea a doua a tutorialului.

In partea asta vom invatata:

- Cum sa verificam daca player-ul are cont pe server si daca nu sa ii creem.

- Cum sa salvam scorul, banii, rank-ul, orele si restul.

Incepem cu verificarea:

Inainte sa incepem avem nevoie de urmatoarea functie in script-ul nostru.

stock GetName( playerid )

{

        new _RocKzSk[ MAX_PLAYER_NAME ];

        GetPlayerName( playerid, _RocKzSk, sizeof _RocKzSk );

        return ( _RocKzSk );

}

Daca o ai deja este perfect iar daca nu o poti adauga acum.

Mai departe ne ducem la callback-ul OnPlayerConnect si adaugam sub el:

if( !BUD::IsNameRegistered( GetName( playerid ) ) )

{

      // Code pentru register

}

Aceasta functie verifica daca player-ul care tocmai s-a conectat nu are cont pe server.

Sub aceasta functie putem adauga un dialog in care putem cere player-ului sa isi faca un cont.

(Vei vedea exemplu la sfarsitul postului)

Mergem mai departe, in caz ca player-ul are deja cont pe server vom adauga:

else

{

      // Code pentru login

}

Chiar sub codul de mai devreme.

Asta este un exemplu cum ar trebuii sa arate:

new _rK[ 128 ];

if( !BUD::IsNameRegistered( GetName( playerid ) ) )

{

format( _rK, sizeof( _rK ), "Bine ai venit %s\nAi nevoie de unde cont ca sa poti juca pe server.", GetName( playerid ) );

ShowPlayerDialog( playerid, Register_D1, DIALOG_STYLE_MSGBOX, "Cont nou", _rK, "Register", "Kick" );

}

else

{

format( _rK, sizeof( _rK ), "Welcome %s\nAcest cont este deja inregistrat\nLogheaza-te Acum!", GetName( playerid ) );

ShowPlayerDialog( playerid, Login_D1, DIALOG_STYLE_MSGBOX, "Logheaza-te", _rK, "Login", "Kick" );

}

IMPORTANT:

Cand faceti dialog de register trebuie sa adaugati:

if ( BUD::RegisterName( GetName( playerid ), inputtext ) )

{

      // Code pentru register

}

Pentru a inregistra numele player-ului in baza de date.

Intre acoladele acelei functii adaugam

new

iUID = BUD::GetNameUID( GetName( playerid ) )

;

BUD::MultiSet( iUID, "s", "Password", inputtext );

Pentru a salva si parola userului in baza de date.

Restul dialogului vi-l faceti voi pentru ca eu nu explic cum faceti un register/login.

Salvare score, bani, rank..etc:

Pentru a incepe salvarea ne ducem la OnPlayerDisconnect si adaugam urmatoarea:

new

iUID = BUD::GetNameUID( GetName( playerid ) )

;

Aceasta functie va lua lua din data de baze id-ul unic al player-ului. (In baza de date fiecare player este salvat cu un iUID unic, ex: 1, 2, 3, 4..)

Sub definitia iUID adaugam:

BUD::MultiSet( iUID, "iisi",

"Money", ROCK_PDATA[ playerid ][ rK_CASH  ],

"Score", ROCK_PDATA[ playerid ][ rK_SCORE ],

  "Rank", ROCK_PDATA[ playerid ][ rK_Rank ],

  "Level", ROCK_PDATA[ playerid][ rK_Level]

);

Vedem aici ca in loc de "playerid" am folosit iUID.

Acea functie salveaza valoarea variabilelor in baza de date.

Daca stii cum functioneaza sscanf iti poti da seama ca "ii" este pentru integrer si sunt 2 deoarece avem doua variabile care stocheaza si salveaza un integrer.

In caz ca avem string pune "s" si tot asa. (La MultiSet cand folosim un string nu trebuie sa ii punem marimea, ex: "s[30]")

ATENTIE:

Numele care il puneti cand salvati trebuie sa fie acelasi cu numele coloanelor care le-ati creeat cu VerifyColumn.

Extragerea datelor din baza de date:

Asta vom pune la OnDialogResponse si anume la dialog-ul cu login sa verificam daca parola introdusa este corecta.

if( BUD::CheckAuth( GetName( playerid ), inputtext )

{

}

inputtext - textul pe care player-ul la introdus in casuta "login" din dialog. (DIALOG_STYLE_INPUT)

In caz ca parola salvata in baza de date este aceeasi cu parola introdusa de player trecem mai departe.

Definim urmatoarele in interiorul acoladelor de la CheckAuth:

new

_Money, _Score, _Rank, _Level,

iUID = BUD::GetNameUID( GetName( playerid ) )

;

Dupa adaugam urmatoarea functie pentru extragerea datelor.

BUD::MultiGet( iUID, "iis[20]i",

"Money", _Money,

"Score", _Score,

"Rank" , _Rank,

"Level", _Level

);

ATENTIE:

La MultiGet daca folosim un string ("s") trebuie sa ii adaugam marimea exact ca in exemplu.

Acum sa setam valoarea datelor extrase cu MultiGet variabilelor care le avem in script.

Pentru asta imediat sub MultiGet adaugam asta sau depinde de caz:

ROCK_PDATA[ playerid ][ rK_SCORE ] = _Score;

ROCK_PDATA[ playerid ][ rK_CASH ] = _Money;

ROCK_PDATA[ playerid ][ rK_Rank ] = _Rank;

ROCK_PDATA[ playerid ][ rK_Level ] = _Level;

Acum ca am facut asta totul este gata.

Un mic exemplu cum ar trebuii sa arate scriptul

Pentru a intelege mult mai bine cum functioneaza uitate la topicul ASTA.

Urmeaza zilele astea urmatoarea parte.

Link to comment
Share on other sites

Nu as avea rabdarea sa scriu fiecare "sizeof" sau if, si alte fiecare cu culoarea specifica :))

Imi place sa arate postul frumos.

(Am mostenit asta de la Zh3r0)

sincer sa fiu, BUD nu cred (din cate stiu) sa fie mai rapid decat SQLite default, deci daca as alege, as alege SQLite normal :D

Asta chiar nu stiu.

Eu folosesc pentru ca mi se pare mult mai comod, arata mult mai bine si are si tot ce trebuie.

Link to comment
Share on other sites

Partea a treia care este si ultima parte.

In partea asta vom invata:

- cum sa extragem variabilele de tip string, integrer si float direct din baza de date si cum sa modificam aceste variabile.

Incepem cu extragerea string-ului:

BUD::GetStringEntry( uid, entry[ ], &value[ ][, size ] )

O sa ne ajute sa facem asta.

Parametrii:

uid - Id-ul unic din baza de date despre care am vorbit in primul tutorial

entry[ ] - Numele coloanei din baza de date din care vrem sa extragem string-ul

value[ ][, size ] - String-ul in care stocam ce am extras din coloana aleasa.

Un mic exemplu cum ar trebuii sa faceti:

new

rTest[ 30 ],

iUID = BUD::GetNameUID( GetName( playerid ) )

;

BUD::GetStringEntry( iUID, "Rank", rTest );

printf( "%s", rTest );

Setare valoare string:

BUD::SetStringEntry( uid, entry[ ], value[ ][, size ] )

Parametrii sunt aceeasi ca la GetStringEntry si vom folosii functia unde vrem noi exact asa:

BUD::SetStringEntry( iUID, "Rank", "Newbie" ); // "Newbie" fiind valoarea setata

Extragere valoare integrer:

BUD::GetIntEntry( uid, entry[ ] )

Aici este mult mai usor ca la string, se face simplu asa:

new

rTest[ 50 ],

iUID = BUD::GetNameUID( GetName( playerid ) )

;

format( rTest, 50, "Val: %i", BUD::GetIntEntry( iUID, "Money" ) );

printf( "%i", rTest );

Setare valoare integrer:

BUD::SetIntEntry( uid, entry[ ], value )

Se facel lafel de usor ca la GetIntEntry:

BUD::SetIntEntry( iUID, "Money", 50 ); // 50 fiind valoarea care vrem sa o adaugam

Extragere valoare float:

BUD::GetFloatEntry( uid, entry[ ] )

Simplu si folositor

new

rTest[ 50 ],

iUID = BUD::GetNameUID( GetName( playerid ) )

;

format( rTest, 50, "Val: %f", BUD::GetFloatEntry( iUID, "Health" );

printf( "%f", rTest );

Setare valoare float:

BUD::SetFloatEntry( uid, entry[ ], Float:value )

Lafel ca la Integrer se foloseste asa:

BUD::SetFloatEntry( iUID, "Health", 100.00 ) // 100.00 este valoarea care tocmai am adaugato coloanei

Sfarsit de tutorial!

- Daca ati ajuns pana aici citind fiecare parte si fiecare cuvant sunteti gata sa va creeati propriul system de register/login.

- Precizez! Folosind functiile SetStringEntry, SetIntEntry si SetFloatEntry, orice valoare avea inainte coloana aleasa va fii inlocuita cu valoare adaugata de tine.

Link to comment
Share on other sites

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.