[TuT]Register Login Sistem (SQLite)

Započeo Comi420, Mart 17, 2017, 08:31:19 PRE PODNE

prethodna tema - sledeća tema

0 članova i 2 gostiju pregledaju ovu temu.

Za pocetak dodajemo na vrh skripte include :
[pawn]
#include  <rBits>
[/pawn]
Zatim definisemo varijable :
[pawn]
new
    Bit1:  g_PlayerLogged       <MAX_PLAYERS>,
    Bit16: g_AdminLevel         <MAX_PLAYERS>,
    DB: Database
;
[/pawn]
Sada da definisemo boje :
[pawn]
#define COL_GREEN               "{6EF83C}"
#define COL_RED                 "{F81414}"
#define COL_BLUE                "{00C0FF}"
[/pawn]
Sada definisemo dialoge :
[pawn]
#define DIALOG_REG 0
#define DIALOG_LOG 1
[/pawn]
Ovo zalepite na kraj skripte trebace vam : PS: ovoaj stock je sa neta  ::)
[pawn]
stock DB_Escape(text[])
{
    new
        ret[80 * 2],
        ch,
        i,
        j;
    while ((ch = text[i++]) && j < sizeof (ret))
    {
        if (ch == '\'')
        {
            if (j < sizeof (ret) - 2)
            {
                ret[j++] = '\'';
                ret[j++] = '\'';
            }
        }
        else if (j < sizeof (ret))
        {
            ret[j++] = ch;
        }
        else
        {
            j++;
        }
    }
    ret[sizeof (ret) - 1] = '\0';
    return ret;
}
[/pawn]
Sada pod OnGameModeInit dodajem oovaj kod,znaci ovaj kod sluzi za otvranje baze :
[pawn]
    Database = db_open("ServerDatabase.db"); 
    db_query(Database, "CREATE TABLE IF NOT EXISTS `USERS` (`NAME`, `PASSWORD`, `IP`, `SCORE`, `CASH`, `ADMINLEVEL`)");
[/pawn]
Sada na OnGameModeExit dodajemo ovaj kod koji zatavara databazu :
[pawn]   
     for(new i; i != MAX_PLAYERS; i++) OnPlayerDisconnect(i, 1);
     db_close(Database);
[/pawn]
Sada se databaza otvara i otvaraj use dialoizi za reglgo sistem na  publicu OnPlayerConnect : 8)
[pawn]
{
    new
        Query[ 150 ],
        DBResult: Result,
        name[ MAX_PLAYER_NAME ]
    ;
    GetPlayerName(playerid, name, sizeof(name));
   
    Bit1_Set(g_PlayerLogged, playerid, false);
    format(Query, sizeof(Query), "SELECT `NAME` FROM `USERS` WHERE `NAME` = '%s'", DB_Escape(name));
    Result = db_query(Database, Query);
    if(db_num_rows(Result))
    {
        format(Query, sizeof(Query), "{FFFFFF}Dobrodosli "COL_BLUE"%s(%d){FFFFFF} na server, vi ste registrirani\n\nMolimo vas da se logirate s vasom lozinkom.", name, playerid);
        ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "{FFFFFF}Ime vaseg servera :", Query, "Login", "Leave");
    }
[/pawn]
Sada da odradimo dialoge na OnDialogResponse : PS. Ostavlajcu komentare na kodu da se lakse snadjete jer je mnogo tezak ..  :-\
[pawn]
  new
        Query[ 256 ], // Radi array . No lies :X
        DBResult: Result, // Radi database Result
        name[ MAX_PLAYER_NAME ], // Radi name string
        ip[ 16 ] // Radi IP string
    ;
    GetPlayerName(playerid, name, sizeof(name)); // Dobivamo ime igraca
    GetPlayerIp(playerid, ip, sizeof(ip));
   
    if(dialogid == 1) // To je id dialoga koji smo gore dodali
    {
        if(response) // Pokrece se ako je igrac odabrao Login
        {
            // ako unutra naÄ'emo NAME ako lozinka pripada igracevom imenu onda
            format(Query, sizeof(Query), "SELECT * FROM `USERS` WHERE `NAME` = '%s' AND `PASSWORD` = '%s'", DB_Escape(name), DB_Escape(inputtext));
            // sprema ^ sta je u database bazi
            Result = db_query(Database, Query);
            // ako su podaci nadjeni onda korisnik postoji, uradimo ovo dolje
            if(db_num_rows(Result))
            {
                new Field[ 20 ]; //Izrada polja za preuzimanje podataka
                // dobivamo polje "SCORE"'s i stavimo u polje
                db_get_field_assoc(Result, "SCORE", Field, 30);
                // stavljamo igracev Lvl
                SetPlayerScore(playerid, strval(Field));
                // strval pretvara string u broj
                // Sad cemo raditi sve isto za ostalo

                // dobivamo polje "CASH"
                db_get_field_assoc(Result, "CASH", Field, 30);
                // dajemo igracu onoliko novca kolko je imao
                GivePlayerMoney(playerid, strval(Field));

                // dobivamo polje "ADMINLEVEL"
                db_get_field_assoc(Result, "ADMINLEVEL", Field, 30);
                // Stavljamo igracu lvl admina koji je bio
                Bit16_Set(g_AdminLevel, playerid, strval(Field));
                // logiranje
                Bit1_Set(g_PlayerLogged, playerid, true);
                // SSalje poruku
                SendClientMessage(playerid, -1, "Vi ste "COL_GREEN"uspjesno{FFFFFF} logirani! ");
            }
            else // Ako je lozinka krivo napisana
            {
                // salje poruku
                format(Query, sizeof(Query), "{FFFFFF}Dobrodosli "COL_BLUE"%s(%d){FFFFFF} na server, vi ste registirani\n\nLogirajte se s vasom lozinkom.", name, playerid);
                // prikazuje dialog
                ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "{FFFFFF}Register System", Query, "Login", "Leave");
                // Pokazuje igracu da je kriva lozinka
                SendClientMessage(playerid, -1, ""COL_RED"Kriva{FFFFFF} lozinka, pokusaj ponovo!");
            }
            db_free_result(Result);
        }
        else return Kick(playerid); // Kicka igraca ako je odabrao leave
    }
    if(dialogid == 0) // id od dialoga
    {
        if(response) // radi ako je igrac odabrao register
        {
            //provjerava dali je lozinka najmanje duga 3 slova/brojeva
            if(strlen(inputtext) > 24 || strlen(inputtext) < 3)
            {
                // salje poruku
                format(Query, sizeof(Query), "{FFFFFF}Dobrodosli "COL_BLUE"%s(%d){FFFFFF} na server, vi ste "COL_RED"not{FFFFFF} registrirani\n\nNapisite vasu lozinku.", name, playerid);
                // Pokazuje opet dialog
                ShowPlayerDialog(playerid, 0, DIALOG_STYLE_INPUT, "{FFFFFF}Register System", Query, "Register", "Leave");
                // Pokazuje ako je lozinka najmanje duga 3 slova/brojka
                SendClientMessage(playerid, -1, "Vasa lozinka mora imati najmanje 3 slova/brojka");
            }
            else
            {
                // Ubacuje sve u databasu pri registriranju
                format(Query, sizeof(Query), "INSERT INTO `USERS` (`NAME`, `PASSWORD`, `IP`, `SCORE`, `CASH`, `ADMINLEVEL`) VALUES('%s','%s','%s', '0', '500', '0')", DB_Escape(name), DB_Escape(inputtext), DB_Escape(ip));
                // Querying the formatted Query ^
                db_query(Database, Query);
                // logiranje
                Bit1_Set(g_PlayerLogged, playerid, true);
                GivePlayerMoney(playerid, 500); // Give Player the money.
                // resetira lvl
                SetPlayerScore(playerid, 0);
                // salje poruku
                SendClientMessage(playerid, -1, "Vi ste "COL_GREEN"uspjesno{FFFFFF} registirani! automatski ste registrirani!");
            }
        }
        else return Kick(playerid); // Kicka ako je igrac odabrao leave
    }
[/pawn]
Kada smo to zavrsili dodajemo jos kod sta se desava kda se igrac diskonektuje sa servera :
[pawn]
    new
        Query[ 200 ],
        name[ MAX_PLAYER_NAME ]
    ;
    GetPlayerName(playerid, name, sizeof(name));

    if(Bit1_Get(g_PlayerLogged, playerid) == 1)
    {
        format(Query,sizeof(Query),"UPDATE `USERS` SET SCORE = '%d', CASH = '%d', ADMINLEVEL = '%d' WHERE `NAME` = '%s'",
                                                                                        GetPlayerScore(playerid),
                                                                                        GetPlayerMoney(playerid),
                                                                                        Bit16_Get(g_AdminLevel, playerid),
                                                                                        DB_Escape(name));
        db_query(Database, Query);
        Bit1_Set(g_PlayerLogged, playerid, false);
    }
[/pawn]
Tobi bio kraj tut-a,nadam se da vam se svideo i da ce posluziti nekom  :P

Credits naravno:
RyDeR: rBits include
Poslednja Izmena: Mart 17, 2017, 08:33:48 PRE PODNE od #Comi
{ 'HTML, PHP, CSS, JAVASCRIPT, PAWN, C#' }

while(alive) code;

Zašto nisi radio u MySqlu ako već radiš sa databazama?

Citat: [UG]_σgι Ï,σяâ,,"Ñ"σиÑ"_ poslato Mart 17, 2017, 12:57:51 POSLE PODNE
Zašto nisi radio u MySqlu ako već radiš sa databazama?
Nezna vjv ni on sta radi uzo sa sanp foruma i preveo

Smijem se kladit da je sa nekog stranog foruma samo prevedeno :'3

TIIIIIRRRRRRUUUUUU RIIIIIIIIIIIIIIIII RUUUUUUUUUUUUU


jaoo skriptercine
{ 'HTML, PHP, CSS, JAVASCRIPT, PAWN, C#' }

while(alive) code;