Rimmon Posted July 2, 2013 Posted July 2, 2013 Cunostinte necesareCrearea unei baze de dateClauzeleFunctiiTag-uriTutorialIn acest tutorial va voi prezenta cum se face un sistem V.I.P deoarece am vazut pe acest site multe tutoriale despre /buyvip , as fi facut un tutorial despre register/login dar a facut Darky deci nu are rost.Tutorialul lui darky il puteti gasi aici .Pentru inceput va trebui sa creem o variabila noua cu prefixul DB:[pawn]new DB:vips ;[/pawn]Pentru a vedea ce face DB: urmariti tutorialul Tag-uri de mai susOk , dupa ce am creat aceasta variabila trebuie sa creem baza de date folosind functia db_open , pentru a intelege mai bine trebuie sa cititi tutorialele de mai sus[pawn]vips = db_open ( "Vips.db" ) ; [/pawn]De obicei codul de mai sus se pune la public OnGameModeInit/OnFilterScriptInitOk , acum dupa ce am facut acest lucru , daca deschidem consola se va crea in scriptfiles automat un fisier .db pe care il puteti deschide cu programul ReadSQL.Tot sub acelasi cod v-om verifica daca exista sau nu un tabel in db-ul(DataBase-ul) nostru...[pawn]db_free_result ( db_query ( vips , "CREATE TABLE IF NOT EXISTS `Vips` ( `Key` INTEGER PRIMARY KEY AUTOINCREMENT , \ `Name` TEXT ,\ `VipL` NUMERIC )" ) ) ;[/pawn]Pentru a afla ce am facut mai sus va rog sa urmariti tutorialul "Clauze" si tutorialul "Functii" , dupa ce am creat acest tabel cu coloanele : Key , Name si VipLTrebuie sa facem inca o noua variabila cu extensia [ MAX_PLAYERS ] pentru ca aceasta variabila trebuie sa fie pentru un player si nu pentru toti playerii[pawn]new vLevel [ MAX_PLAYERS ] ;[/pawn]De variabila de mai sus ne vom ajuta pentru a seta levelul unui player...Acum ca am creat DB-ul trebuie sa trecem la alta parte Crearea unui cont in tabel Scrierea in DB este foarte simpla , scrierea se face printr-un format de obicei , folosind clauzeMai intai v-om crea o variabila globala de tip string ( adica o punem sus in script sub include-uri )[pawn]new Query [ 100 ] ; [/pawn]Am creat o vaiabila noua cu numele Query si poate contine 100 de caractere , probabil am pus prea mult ( ma refer la numarul de caractere ) , dar asa sunt eu , risipitor )Dupa ce am facut asta , trecem la partea in care creem contul in tabel...Dupa cum am mai spus pentru a face asta trebuie sa cititi tutorialul cu clauzele SQLite-uluiSa trecem la treaba...Prima data v-om verifica daca exista sau nu un cont in acea baza de date , daca exista ii vom insera acelui player levelul care il are in DB daca nu exista il vom crea si ii vom da levelul 0new DBResult:result; format ( Query , 100 , "SELECT * FROM ` Vips ` WHERE ` Name ` = ' %s ' " , pName ( playerid ) ) ; result = db_query ( vips , Query ) ; Pentru a vedea ce face DBResult urmariti tutorialul Tag-uri de mai sus Cu acest format am selectat tot ( * ) din tabelul `Vips` unde numele playerului este %s , dupa cum vedeti am folosit in acest format pName , daca compilati exact cum am facut eu ve-ri primi eroare din cauza ca voi nu aveti stock-ul pName... Ca sa nu primiti eroare trebuie sa creati urmatorul stock [pawn]stock pName ( playerid ) { new i [ 24 ] ; GetPlayerName ( playerid , i , 24 ) ; return i; } [/pawn] Dupa ce facem asta ne intoarcem la codul de mai sus si v-om verifica daca exista sau nu contul in db cu functia db_num_rows Daca nu stiti ce face functia db_num_rows cititi tutorialul 'Functii' if ( !db_num_rows ( result ) ) { format ( Query , 100 , "INSERT INTO `Vips` VALUES (NULL , '%s' , '%d' ) " , pName ( playerid ) , vLevel [ playerid ] = 0 ) ; db_query ( vips , Query ) ; } Cu codul de mai sus , daca nu exista acel cont ( nume ) in db-ul Vips se va crea o coloana cu numele playerului si levelul de v.i.p 0 Acum , trebuie sa facem sa ii redea levelul de vip playerului de fiecare daca cand se conecteaza [pawn]if ( db_num_rows ( result ) ) { new field [ 30 ] ; db_get_field_assoc ( result , "VipL" , field , 30 ) ; vLevel [ playerid ] = strval ( field ) ; } [/pawn] pentru a afla ce face db_get_field_assoc urmariti cu atentie tutorialul 'Functii' Codul ar arata cam asa: public OnPlayerConnect ( playerid ) { new DBResult:result; format ( Query , 100 , "SELECT * FROM ` Vips ` WHERE ` Name ` = ' %s ' " , pName ( playerid ) ) ; result = db_query ( vips , Query ) ; if ( !db_num_rows ( result ) ) { format ( Query , 100 , "INSERT INTO `Vips` VALUES (NULL , '%s' , '%d' ) " , pName ( playerid ) , vLevel [ playerid ] = 0 ) ; db_query ( vips , Query ) ; } else if ( db_num_rows ( result ) ) { new field [ 30 ] ; db_get_field_assoc ( result , "VipL" , field , 30 ) ; vLevel [ playerid ] = strval ( field ) ; } db_free_result ( result ) ; return 1 ; } format ( Query , 100 , "UPDATE `Vips` SET `VipL` = ' %d ' WHERE `Name` = '%s' " , vLevel [ playerid ] , pName ( playerid ) ) ; db_query ( vips , Query ) ; Cam acesta este tutorialul .Daca am gresit cevaspuneti-mi intr-un reply Updatarea statisticilor Pentru a updata statisticile playerilor se foloseste clauza UPDATE impreuna cu clauzele SET si WHERE folosite de obicei la OnPlayerDisconnect , pentru a afla mai multe cititi tutorialele Functii si Clauze puse mai sus Massari e curva mea
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now