[TuT] Kako napraviti register sistem ( Dialogs, SQLite i rBits )

Započeo Obrisan korisnik
22. Sep. 2011. Zaključano
9,572
pregleda
46
postova
Deleted User
Obrisan korisnik
22. Sep. 2011.
Vidio sam da puno ljudi trazi ovaj tutorial al ka niko nije htio napraviti, pa sam ja htio svima vama pomoci editiranje ovog tutoriala!Pozorno pratite!
U ovom tutorialu ce se spremati sljedece:
  • Ime

  • Lozinka

  • IP address

  • Level

  • Novci

  • Admin Level


Pocnimo
Definiramo variable i funkcije
#include                        
#include                       

/* ** Colours ** */
#define COL_GREEN              "{6EF83C}" // Zelebna boja
#define COL_RED                "{F81414}" // Crvena boja
#define COL_BLUE                "{00C0FF}" // Plava boja

/* ** Player Data ** */
new
    Bit1:  g_PlayerLogged      ,
    Bit16: g_AdminLevel        ,
    DB: Database
;

Trebat cemo sve ovo ispod, pa zaljepite nekamo u skriptu
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;
}

Trebat cete ove funkcije da mozete pratiti tutorial
Stvaranje i otvaranje database
public OnFilterScriptInit()
{
    Database = db_open("ServerDatabase.db"); // Ovo ce otvoriti databasu pod imenom , 'ServerDatabase.db'
    //Ako tablica ne postoji, naparvit cemo ju u gamemodu
    db_query(Database, "CREATE TABLE IF NOT EXISTS `USERS` (`NAME`, `PASSWORD`, `IP`, `SCORE`, `CASH`, `ADMINLEVEL`)");
    return 1;
}

Kada ce se server pokrenuti napravit ce databasu sam, procedura je:
Otvaranje database > pisanej u databasu > zatvaranje database
Evo zasto je SQLite zanimljiv, skoro sve radi umjesto vas!
Zato provjerite dal imate ovo u gamemodu
POZOR
Provjerite dal ste zatovirli databasu, ako niste nesto bi moglo poci krivo, zato napravvite ovako
public OnFilterScriptExit()
{
    for(new i; i != MAX_PLAYERS; i++) OnPlayerDisconnect(i, 1);
    db_close(Database);
    return 1;
}

Otvaranje database "rucno"
Da ovo korisitite trebat ce vam SQLite database opener.SQLite Database Browser cu ja koristiti tako da i vama preporucujem, skinete ga tako da u google napisete SQLite Database Browser 2.0 b1 download"
Ako igrac nije ili je registriran
public OnPlayerConnect(playerid)
{
    new
        Query[ 150 ], // napravi Query
        DBResult: Result, // Napravi database Result
        name[ MAX_PLAYER_NAME ] //napravi a name string
    ;
    GetPlayerName(playerid, name, sizeof(name)); // Dobivanje igracevog imena.
   
    Bit1_Set(g_PlayerLogged, playerid, false); // mi cemo resetirati varijablu na 0 = false.
   
    // sada cemo odabrati od  `USERS` gdje ce naci ime korisnika.
    format(Query, sizeof(Query), "SELECT `NAME` FROM `USERS` WHERE `NAME` = '%s'", DB_Escape(name));
    // ubacit cemo  query u db rezultat. Query ce napraviti sve sta kaze
    Result = db_query(Database, Query);
    // ako su num rows tamo, to znaci da je registiran
    if(db_num_rows(Result))
    {
        // salje dobrodosli poruku
        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);
        // Pokazuje dialog (login)
        ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "{FFFFFF}Register System", Query, "Login", "Leave");
    }
    else // Else ako nije registiran
    {
        // salje dobrodosli poruku
        format(Query, sizeof(Query), "{FFFFFF}Dobrodosli "COL_BLUE"%s(%d){FFFFFF} na server, vi "COL_RED"niste{FFFFFF} registrirani\n\n napisite vasu lozinku da vas mozemo registrirati.", name, playerid);
        // Pokazuje dialog registriranje
        ShowPlayerDialog(playerid, 0, DIALOG_STYLE_INPUT, "{FFFFFF}Register System", Query, "Register", "Leave");
    }
    db_free_result(Result);
    return 1;
}

Ovaj dolje kod je povezan s ovim gore, tako da ga morate imati u skripti
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    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
    }
    return 1;
}

Posljednji korak, spremanje podataka!
public OnPlayerDisconnect(playerid, reason)
{
    new
        Query[ 200 ],
        name[ MAX_PLAYER_NAME ] // radi name string
    ;
    GetPlayerName(playerid, name, sizeof(name)); // dobivamo ime igraca

    if(Bit1_Get(g_PlayerLogged, playerid) == 1)
    {
        //ovo ce updatovati vase podatke s najnovijim
        format(Query,sizeof(Query),"UPDATE `USERS` SET SCORE = '%d', CASH = '%d', ADMINLEVEL = '%d' WHERE `NAME` = '%s'",
                                                                                        GetPlayerScore(playerid), // Dobivamo LVL igraca
                                                                                        GetPlayerMoney(playerid), // Dobivamo igracev novac
                                                                                        Bit16_Get(g_AdminLevel, playerid), // Dobivamo admin lvl
                                                                                        DB_Escape(name)); // Dobivamo igracevo ime
        db_query(Database, Query);
        // resetirat cemo ovaj array na 0, = false.
        Bit1_Set(g_PlayerLogged, playerid, false);
    }
    return 1;
}

Evo napokon smo gotovi!
Provjerite dal imate sve kao u tutorialu.
Ako ima bugova javite u komentar da popravimo!
Preveo i editirao Don_Sergio
Napravio Lorenc_
Hvala svima na citanju
Deleted User
Obrisan korisnik
22. Sep. 2011.
Evo gotov je tutorial isprobajte dal radi..! Sretno!
Deleted User
Obrisan korisnik
22. Sep. 2011.
Stavi izvorni link.
Deleted User
Obrisan korisnik
22. Sep. 2011.
Koksildo wrote on September 22, 2011, 8:01 pm:
Stavi izvorni link.

Ok.
Deleted User
Obrisan korisnik
22. Sep. 2011.
pohvala na trudu...dobar tut
Deleted User
Obrisan korisnik
22. Sep. 2011.
Hvala
Viky
6
Legenda Foruma
23. Sep. 2011.
http://balkan-samp.com/forum/index.php?topic=12028.0

Čini mi se da je to isto ovo, samo u ovom Lukšinom ima i za page.
Deleted User
Obrisan korisnik
23. Sep. 2011.
BloodMaster wrote on September 23, 2011, 9:15 am:
http://balkan-samp.com/forum/index.php?topic=12028.0

Čini mi se da je to isto ovo, samo u ovom Lukšinom ima i za page.

Neznam, mislim da je ovaj jednostavniji....
Procijenite..
danijel123
5
Kingpin
23. Sep. 2011.
bravo lep tut
taft
5
Underboss
23. Sep. 2011.
BloodMaster wrote on September 23, 2011, 9:15 am:
http://balkan-samp.com/forum/index.php?topic=12028.0

Čini mi se da je to isto ovo, samo u ovom Lukšinom ima i za page.


Ovo je SQLlite, a ono MySQL i ovo koristi od Ryder-a rBit's - ono su obicne varijable ili PVarovi (nisam zapamtio)

Nije loÅ¡e, dobar tutorial 🙂
Black_Zero
4
Made Man
23. Sep. 2011.
Lep tutorijal, bravo 🙂
danijel123
5
Kingpin
23. Sep. 2011.
dobar tut
Deleted User
Obrisan korisnik
23. Sep. 2011.
Hvala svima!
Dal je kod isprobao? Imali warringa ili errora?
Hustley
4
Made Man
28. Sep. 2011.
Nisam isprobao, ali cini mi se da nece biti, odlican TuT cestitam, na forumu dugo nije bio ovakav.
Deleted User
Obrisan korisnik
28. Sep. 2011.
Dobro je al bilo bi bolje da si FS napravio zbog nekih koji neznaju

Morate biti prijavljeni da biste odgovorili na ovu temu.

Prijava

© 2026 SmartShark. All rights reserved.

Powered by Momentum|v2026.3.001 Alpha