-LiveGameS-


CalendarGalerieFAQCautareAcasaMembriGrupuriInregistrareConectare

Distribuiţi|

[SQLITE]CREAREA UNUI SERVER [ II ]

Vezi subiectul anterior Vezi subiectul urmator In jos
AutorMesaj
Moderator Global
avatar


Rank: Moderator Global
Mesaje : 70
Puncte : 132
Reputatie : 0
Data de inscriere : 16/11/2013
MesajSubiect: [SQLITE]CREAREA UNUI SERVER [ II ] Lun Noi 18, 2013 7:44 am

Cunostinte necesare
Crearea unei baze de date
Clauzele
Functii
Taguri
Tutorial


Crearea unui server
Register/Login System

Hey , în acest tutorial , vă voi prezenta cum se crează un sistem de register si login , pentru server-ul vostru , prima dată , trebuie sa declarăm , 2 variabile , unul tip string , si celălalt cu tag-ul DB:
Aceste 2 variabile trebuie sa fie globale , nu locale , aşa că le v-om scrie fix sub include-uri
Cod:
_________________________________________
new Query [ 200 ] , DB:users;
_________________________________________


Acum , mergem la OnGameModeInit , deoarece este un GameMode , si vom crea baza de date
Cod:
_________________________________________
users = db_open ( "Users.db" ) ;
_________________________________________


Cu ajutorul functiei de mai sus , la deschiderea consolei , se creaza automat in scriptfiles Users.db , acel fisier poate fi deschis cu programul
ReadSQL

Ok , dupa toate acestea, fix sub
users = db_open ( "Users.db" ) ;

facem urmatorul lucru
Cod:
_____________________________________________________________________________

db_query ( users , "CREATE TABLE IF NOT EXISTS `Users` (`Name` TEXT ,\
`Password` TEXT,\
`Money` NUMERIC,\
`Score` NUMERIC)" ) ;
_____________________________________________________________________________


Cu acest cod , in baza de date Users.db , se creaza automat tabelul Users cu coloanele Name , Password , Money , Score , adica cea ce trebuie sa se salveze in cont.
Eu va arat cum sa creati un sistem de baza , nu unu avansat ,cu coins , kills , deaths , hours ,minutes , seconds etc.
Dupa ce am facut toate astea , mergem la OnPlayerConnect , explicatiile le voi pune cu //
Dar inainte sa ne ducem la OnPlayerConnect , facem un mic stock , care sa "afle" numele playerului , sa ne miscam mai rapid
Cod:
___________________________________________
stock pName ( playerid ){
new i [ 24 ] ;
GetPlayerName ( playerid , i , 24 ) ;
return 1;
}
___________________________________________


Acum sa mergem la OnPlayerConnect
Cod:
___________________________________________________
public OnPlayerConnect ( playerid )
{
new DBResult:res;
format ( Query , 200 , "SELECT * FROM `Users` WHERE `Name` = '%d' " , pName ( playerid ) ) ; //Linia aceasta selecteaza toate datele playerului cu numele %s
res = db_query ( users , Query ) ;//Am "stocat" rezultatul query-ului in variabila res pentru a putea verifica daca contul exista sau nu
if ( db_num_rows (res) ) { //Verifica daca contul exista in Users.db(daca contul exista)
ShowPlayerDialog ( playerid , 400 , DIALOG_STYLE_INPUT , "Login" , "Scrie parola mai jos pentru a te loga" , "login" , "Cancel" ) ;
}
else if ( !db_num_rows ( res ) ){//Verifica daca contul exista in Users.db(daca contul nu exista)
ShowPlayerDialog ( playerid , 401 , DIALOG_STYLE_INPUT , "Register" , "Scrie parola mai jos pentru a te inregistra" , "register" , "Cancel" ) ;
}
db_free_result ( res ); //Eliberam rezultatul
return 1;
}
___________________________________________________



Ca sa fiu cat de clar se poate , cu ajutorul formatului , se selecteaza toate datele playerului , daca playerul este gasit in tabel ii va aparea dialogul de login , daca acel player nu exista in tabel , ii va aparea dialogul de inregistrare .
Ok , urmeaza inserarea si "loadarea"(nu stiu cum se spune in romana :)) ) datelor in/din tabel.
mergem la OnDialogResponse si facem urmatoarele

Cod:
_________________________________________________________
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
new DBResult:res ;
switch( dialogid ){
case 401:{ //Dialogul de register
if ( !response ) return Kick ( playerid ) ; //Ii da kick player-ului daca apasa pe cancel
else if (strlen ( inputtext ) < 4 || strlen ( inputtext ) > 16 ) return ShowPlayerDialog ( playerid , 401 , DIALOG_STYLE_INPUT , "Invalid" , "Parola trebuie sa contina intre 4-16 caractere" , "register" , "Cancel" ) ;
else{//daca parola contine intre 4-16 si apasa pe register
format (Query , 200 , "SELECT * FROM `Users` WHERE `Name` = '%s' " , pName ( playerid ) ) ; Acelasi lucru ca la OnPlayerConnect , doar ca aici , vom insera in cont dupa verificare..
res = db_query ( users , Query ) ;
if ( !db_num_rows ( res ) ){daca contul nu exista se va crea
format ( Query , 200 , "INSERT INTO `Users` VALUES ( '%s' , '%s' , '%d' , '%d' )" , pName ( playerid ) , inputtext , 0,0 ) ;
db_query ( users , Query ) ;
}
db_free_result ( res ) ;
}
}
case 400: { //Dialogul de login
format (Query , 200 , "SELECT * FROM `Users` WHERE `Name` = '%s' " , pName ( playerid ) ) ; Acelasi lucru ca la dialogul de register, doar ca aici , vom reda statisticile jucatorului..
res = db_query ( users , Query ) ;
if (db_num_rows ( res ) ) {
format ( Query , "SELECT * FROM `Users` WHERE `Name` = '%s' AND `Password` = '%s' " , pName ( playerid ) , inputtext ) //verificam parola contului de pe care a intrat playerul
res = db_query ( users , Query ) ;
if ( db_num_rows ( res ) ) { //Parola introdusa este cea corecta
new field [ 10 ] ;
db_get_field_assoc ( res , "Money" , field , 10 ) ; //Luam valoarea lui "Money" din tabel si o dam playerului in joc
GivePlayerMoney ( playerid , strval ( field ) ) ;
db_get_field_assoc ( res , "Score" , field , 10 ) ; //Luam valoarea lui "Score" din tabel si o dam playerului in joc
SetPlayerScore( playerid , strval ( field ) ) ;
}
else {//Parola introdusa nu este corecta
ShowPlayerDialog ( playerid ,400 , DIALOG_STYLE_INPUT , "Login" , "Parola introdusa nu este corecta", "Login" , "Cancel" ) ;
}
}
}
}
return 1;
}
_________________________________________________________



Cam asta a fost tot ce e legat de register/login , acum mai avem salvarea datelor care si acea este foarte simpla , mergem la OnPlayerDisconnect si facem urmatoarele lucruri
Cod:
__________________________________________________
public OnPlayerDisconnect ( playerid )
{
format ( Query , 200 , "UPDATE `Users` SET `Money` = '%d' , `Score` = '%d' WHERE `Name` = '%s' " , GetPlayerMoney ( playerid ) , GetPlayerScore ( playerid ) , pName ( playerid ) ) ; //Updateaza "Money" si "Score" unde numele = 'Numele playerului care se deconecteaza'
db_free_result ( db_query ( users , Query ) ) ; //Eliberam rezultatul si scriem rezultatul in database
return 1 ;
}
Sus In jos
Vezi profilul utilizatorului

[SQLITE]CREAREA UNUI SERVER [ II ]

Vezi subiectul anterior Vezi subiectul urmator Sus
Pagina 1 din 1

Permisiunile acestui forum:Nu puteti raspunde la subiectele acestui forum
-LiveGameS- :: >>[LiveGameS]Resurce Samp :: Tutoriale-
Copyrightˆ2013 by Khrystyan&zDs - Toate drepturile sunt rezervate.