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
PocnimoDefiniramo variable i funkcije
#include <a_samp>
#include <rBits>
/* ** 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 <MAX_PLAYERS>,
Bit16: g_AdminLevel <MAX_PLAYERS>,
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 databasepublic 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
POZORProvjerite 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 registriranpublic 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_ (http://forum.sa-mp.com/showthread.php?t=278188)
Hvala svima na citanju
Evo gotov je tutorial isprobajte dal radi..! Sretno!
Stavi izvorni link.
Citat: Koksildo poslato Septembar 22, 2011, 22:01:31 POSLE PODNE
Stavi izvorni link.
Ok
. (http://forum.sa-mp.com/showthread.php?t=278188)
pohvala na trudu...dobar tut
Hvala
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.
Citat: BloodMaster poslato Septembar 23, 2011, 11:15:16 PRE PODNE
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..
bravo lep tut
Citat: BloodMaster poslato Septembar 23, 2011, 11:15:16 PRE PODNE
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 :)
Lep tutorijal, bravo :)
dobar tut
Hvala svima!
Dal je kod isprobao? Imali warringa ili errora?
Nisam isprobao, ali cini mi se da nece biti, odlican TuT cestitam, na forumu dugo nije bio ovakav.
Dobro je al bilo bi bolje da si FS napravio zbog nekih koji neznaju
Ja probao, radi.
Ja sam ovo sve spojio i napravio kao filterscriptu i ok je sve, 0 errora. Svaka Äast za trud.
Imam pitanje jedno. Kako sada kad sam to napravio, kako da stavim da kad se neko registruje/loguje da se automatski spawna, da ne mora klikat ono "Spawn". Hvala
P.S: Ko ne može naći ovaj include rBits evo vam:
http://pastebin.com/gqqV92MT
Citat: Smajke poslato Mart 15, 2012, 19:02:22 POSLE PODNE
Ja probao, radi.
Ja sam ovo sve spojio i napravio kao filterscriptu i ok je sve, 0 errora. Svaka Äast za trud.
Imam pitanje jedno. Kako sada kad sam to napravio, kako da stavim da kad se neko registruje/loguje da se automatski spawna, da ne mora klikat ono "Spawn". Hvala
P.S: Ko ne može naći ovaj include rBits evo vam:
http://pastebin.com/gqqV92MT
SetSpawnInfo( playerid, 0, 0, 1958.33, 1343.12, 15.36, 269.15, 26, 36, 28, 150, 0, 0 );// mora ici u public OnPlayerRequestClass
SpawnPlayer(playerid);// stavis kad zelis da se spawna
odlican tut.. svaka cast! :D
Dobar Tut :)
Bravo za tut odlican je sad cu da probam da vidim umijem li ovo ubacit da vidim jel dobro ovo!:)
Moze pomoc...
dobijem ovaj error
C:\Users\Sule&Semir\Documents\GTA San Andreas User Files\SAMP\Mod od 0\gamemodes\Untitled.pwn(6) : fatal error 100: cannot read from file: "rBits"
Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
1 Error.
Nemas taj inculde skini pa ga ubaci.
Citat: [R] - Rıckeη poslato Mart 17, 2012, 10:11:20 PRE PODNE
Nemas taj inculde skini pa ga ubaci.
Imam include... definiran je!
Ok, rbits nikako ne koristiti, jednostavno pawn nije sposoban za, tj dobro ne radi s odredjenim bitovima, testirao sam i i zna bez ikakvog razloga crashat server...
koliko god se rbits cinili kao dobra solucija, ne donose bas puno toga, osim naravno ustede memorije, a sporije se izvrsavaju nego normalne 32 bitne varijable i to osjetno + zna server crashat zbog njih...
ista je problematika vec raspravljana i na samp forumu...
Citat: Dude poslato Mart 17, 2012, 10:17:12 PRE PODNE
Ok, rbits nikako ne koristiti, jednostavno pawn nije sposoban za, tj dobro ne radi s odredjenim bitovima, testirao sam i i zna bez ikakvog razloga crashat server...
koliko god se rbits cinili kao dobra solucija, ne donose bas puno toga, osim naravno ustede memorije, a sporije se izvrsavaju nego normalne 32 bitne varijable i to osjetno + zna server crashat zbog njih...
ista je problematika vec raspravljana i na samp forumu...
Hvala Dude :)
dobar tut
Nije lose za pocetnike xD
ne koristite rBits, moj savjet od srca
Citat: Armin44 !GF! poslato Mart 18, 2012, 11:03:19 PRE PODNE
Nije lose za pocetnike xD
Lolz...NEmas ti pojma o cemu govoris.SQLite NIJE za pocetnike tako da..
Tutorial jeste dobar,pohvala.
Svaka cast! ;D
Hvala ti na pomoći pomoglo mi je!
Sorry na refreshu teme ali imam jedno pitanje dal sam cijeli mod moram radit u SQL ili?InaÄe samo register može biti u SQL a ovo ne mora
Citat: pllopen poslato April 18, 2012, 15:38:31 POSLE PODNE
Citat: Dane poslato April 18, 2012, 15:21:11 POSLE PODNE
Sorry na refreshu teme ali imam jedno pitanje dal sam cijeli mod moram radit u SQL ili?InaÄe samo register može biti u SQL a ovo ne mora
Ja mislim da moze register biti u sql ,a da ostalo netreba.. I nemoj koristit rBits pogledaj 1-2 stranice unazad dude je sve rekao..
Nikad nije problem promijeniti register/login sistem.ÄŒekam odgovor na moje pitanje od nekoga tko zna malo bolje da mi odgovori.
Nije lose trebati ce poćetnicima :D
Odlican tut !
Lep tut. ... Hvala sto si odvojio vremena da pomognes ;)
Citat: Dane poslato April 18, 2012, 15:40:39 POSLE PODNE
Citat: pllopen poslato April 18, 2012, 15:38:31 POSLE PODNE
Citat: Dane poslato April 18, 2012, 15:21:11 POSLE PODNE
Sorry na refreshu teme ali imam jedno pitanje dal sam cijeli mod moram radit u SQL ili?InaÄe samo register može biti u SQL a ovo ne mora
Ja mislim da moze register biti u sql ,a da ostalo netreba.. I nemoj koristit rBits pogledaj 1-2 stranice unazad dude je sve rekao..
Nikad nije problem promijeniti register/login sistem.ÄŒekam odgovor na moje pitanje od nekoga tko zna malo bolje da mi odgovori.
Na registraciji se kreira tvoj fajl sa tvojim varijablama i SQL ih upisuje u svoj format(Nisam siguran koji) ali ini ne moze da cita iz njih.Da bi koristio SQL registraciju ceo mod mora da bude u tom stilu.A mislim da je glupo da je jedno na SQL a jedno na ini..(cak mislim da to ne moze-nisam siguran.)
Pa jbg onda.
Dobar tut :)
Pohvala za trud stvarno dobar tut... :-D
Odlican TUT! al zar nebi bilo bolje koristit npr sscanf, umjesto da se svaka vrijednost vadi posebno.. jer mislim da je sqlite sposoban loadat i sejvat veliku kolicinu podataka odjednom kj ne ? :P
Moze pomoc
C:\Documents and Settings\HS56\Desktop\tx\TechLand Xperia\gamemodes\mdrp.pwn(91) : error 017: undefined symbol "g_PlayerLogged"
C:\Documents and Settings\HS56\Desktop\tx\TechLand Xperia\gamemodes\mdrp.pwn(96) : error 017: undefined symbol "Database"
C:\Documents and Settings\HS56\Desktop\tx\TechLand Xperia\gamemodes\mdrp.pwn(116) : error 021: symbol already defined: "SetPlayerMapIcon"
C:\Documents and Settings\HS56\Desktop\tx\TechLand Xperia\gamemodes\mdrp.pwn(118) : error 010: invalid function or declaration
C:\Documents and Settings\HS56\Desktop\tx\TechLand Xperia\gamemodes\mdrp.pwn(130) : error 017: undefined symbol "g_PlayerLogged"
C:\Documents and Settings\HS56\Desktop\tx\TechLand Xperia\gamemodes\mdrp.pwn(133 -- 136) : error 017: undefined symbol "g_AdminLevel"
C:\Documents and Settings\HS56\Desktop\tx\TechLand Xperia\gamemodes\mdrp.pwn(138) : error 017: undefined symbol "Database"
C:\Documents and Settings\HS56\Desktop\tx\TechLand Xperia\gamemodes\mdrp.pwn(140) : error 017: undefined symbol "g_PlayerLogged"
C:\Documents and Settings\HS56\Desktop\tx\TechLand Xperia\gamemodes\mdrp.pwn(144) : error 010: invalid function or declaration
C:\Documents and Settings\HS56\Desktop\tx\TechLand Xperia\gamemodes\mdrp.pwn(375) : error 017: undefined symbol "Database"
C:\Documents and Settings\HS56\Desktop\tx\TechLand Xperia\gamemodes\mdrp.pwn(395) : error 017: undefined symbol "g_AdminLevel"
C:\Documents and Settings\HS56\Desktop\tx\TechLand Xperia\gamemodes\mdrp.pwn(397) : error 017: undefined symbol "g_PlayerLogged"
C:\Documents and Settings\HS56\Desktop\tx\TechLand Xperia\gamemodes\mdrp.pwn(433) : error 017: undefined symbol "Database"
C:\Documents and Settings\HS56\Desktop\tx\TechLand Xperia\gamemodes\mdrp.pwn(435) : error 017: undefined symbol "g_PlayerLogged"
C:\Documents and Settings\HS56\Desktop\tx\TechLand Xperia\gamemodes\mdrp.pwn(447) : error 010: invalid function or declaration
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
15 Errors.
Hvala na tutu pomoglo mi je..!!!
Napravi kopiju includea "a_samp" nazovi ga "rBits" otvori ga sa "Notepad-om" zameni kod sa ovim http://pastebin.com/5hr6mfMt i izadji iz notepada i klikni "Save", pokusaj compilati i trebalo bi raditi :)
(http://imageshack.us/photo/my-images/9/1n9trd45jioel6nbsjl.png/)
(http://img9.imageshack.us/img9/4818/1n9trd45jioel6nbsjl.png)