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
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
Citat: Farisâ,,¢ poslato Mart 17, 2017, 13:39:00 POSLE PODNE
Smijem se kladit da je sa nekog stranog foruma samo prevedeno :'3
Eo morem zajedno
jaoo skriptercine
Pohvale za neki "trud".
Eo ga prvi sa sanp foruma
http://forum.sa-mp.com/showthread.php?t=278188
ovo sa samp foruma
Najs. ;)
Dobro, nije loš tutorial