Započeo Obrisan korisnik
•22. Sep. 2011.• Zaključano[TuT] Kako napraviti register sistem ( Dialogs, SQLite i rBits )
9,656
pregleda
46
postova
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:
Pocnimo
Definiramo variable i funkcije
Trebat cemo sve ovo ispod, pa zaljepite nekamo u skriptu
Trebat cete ove funkcije da mozete pratiti tutorial
Stvaranje i otvaranje database
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
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
Ovaj dolje kod je povezan s ovim gore, tako da ga morate imati u skripti
Posljednji korak, spremanje podataka!
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
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
Legenda Foruma
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosAktivan Član
12 / 250 XP
Početnik(1)
888
Postovi:
66
Teme:
Pridružio se:Okt. 2009
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.
Čini mi se da je to isto ovo, samo u ovom Lukšinom ima i za page.
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.
Čini mi se da je to isto ovo, samo u ovom Lukšinom ima i za page.
Neznam, mislim da je ovaj jednostavniji....
Procijenite..
Kingpin
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
240 / 250 XP
Početnik(0)
1,110
Postovi:
82
Teme:
Pridružio se:Jun 2011
Underboss
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
241 / 250 XP
Početnik(0)
731
Postovi:
54
Teme:
Pridružio se:Sep. 2010
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.
Č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 🙂
Made Man
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
90 / 100 XP
Početnik(0)
466
Postovi:
17
Teme:
Pridružio se:Jan. 2011
Kingpin
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
240 / 250 XP
Početnik(0)
1,110
Postovi:
82
Teme:
Pridružio se:Jun 2011
Morate biti prijavljeni da biste odgovorili na ovu temu.
Prijava