Код:
// This is a comment
// uncomment the line below if you want to write a filterscript
//#define FILTERSCRIPT
#include <a_samp>
#include <a_mysql>
#include <a_sampmysql>
#define SQL_HOST "localhost" // Priėjimas iki MYSQL duomenų bazės, jeigu naudojate localhost įraљykite "localhost"
#define SQL_USER "root" // MYSQL duomenų bazės vartotojas, jeigu naudojate localhost įraљykite "root"
#define SQL_PASS "" // slaptaћodis, jeigu naudojate localhost, daћniausiai jis būna be slaptaћodћio, tada palikite ""
#define SQL_DB "vLife" // Jūsų duomenų bazės pavadinimas per kurį jungsimės.
#define TABLENAME "players" // Kad nereiktų raљinėti kas kartą lentelės, pasidarome bindą. Čia įraљykite savo lentelės pavadinimą.
//colors // spalvos
#define MAX_STRING 1024
#define MAX_RESULT 1024
#define SPALVA_ORANDZINE 0xff9b39ff
#define COLOR_WHITE 0xff9b39ff // orandћinė spalva, naudojana visoje registracijoje.
// colors end // spalvų pabaiga
new bool:Logged[MAX_PLAYERS];
new result[MAX_RESULT];
enum pInfo
{
pSQID,
pPass[MAX_STRING],
bool:pIsLogin,
pKills,
pDeaths,
pCash
};
new PlayerInfo[MAX_PLAYERS][pInfo];
public OnFilterScriptInit()
{
print("\n--------------------------------------");
print(" Blank Filterscript by your name here");
print("--------------------------------------\n");
mysql_connect(SQL_HOST, SQL_USER,SQL_DB, SQL_PASS); // Jungiame į MYSQL
mysql_debug(1); // įjungiame debug, jis raљys visas įvykdytas bei neįvykdytas jungtis į txt failą kurį rasite serverio direktorijoje
return 1;
}
public OnFilterScriptExit()
{
return 1;
}
public OnGameModeInit()
{
// Don't use these lines if it's a filterscript
SetGameModeText("Blank Script");
AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
return 1;
}
public OnGameModeExit()
{
if(mysql_ping()) mysql_close(); // iљjungiame jungtį kartu kai iљsijungia naudojamas skriptas filterscript љiuo atviejiu.
return 1;
}
public OnPlayerRequestClass(playerid, classid)
{
SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
if ( !Logged[ playerid ] ) // jeigu ћaidėjas NE prisijungęs su savo duomenimis neleidћame jo į serverį, right ?
{
SendClientMessage(playerid,SPALVA_ORANDZINE,"Jūs neprisijungęs, todėl tęsti negalite."); // paraљome klientui kas ne taip.
return 0; // neduodam nieko toliau daryti, laukiam kol prisijungs.
}
return 1;
}
public OnPlayerConnect(playerid)
{
Logged[playerid] = false; // Nustatome neigiamą reikљmę Logged kintamajam, nes kai ћaidėjas prisijungia į serverį, jis nebūna prisijungęs prie savo sąskaitos, right ?
new string[128],pName[MAX_PLAYER_NAME+1],query[256]; // sukuriame kintamuosius, vardo atpaћinimui, duomenims į mysql paduoti bei ћinutei iљreikљti.
GetPlayerName(playerid,pName,sizeof pName); // įdedame į kintamajį dabartinį ћaidėjo vardą, jį naudosime teisingai MYSQL eilutei surasti.
format(query,sizeof(query),"SELECT * FROM `"TABLENAME"` WHERE Vardas = '%s'",pName); // Sudedame apklausą kurią siūsime uћklausai gauti visai informacijai apie ћaidėją.
mysql_query(query); // siunčiame uћklausą kurią sūdėjome į query
if(IsPlayerConnected(playerid)) // patikriname jeigu ћaidėjas prisijunęs
{
GetPlayerName(playerid,pName,sizeof pName); // paimame dar kartą jo vardą.
mysql_store_result(); // atsikeliame iљ MYSQL gautą rezultatą
if(mysql_num_rows() > 0) // Jeigu rado duomenis apie vartotoją reiљkiasi jis uћregistruotas. Duodame jam љansą prisijungti :D
{
ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Prisijungimas","Įveskite savo sąskaitos prisijungimo slaptaћodį:","Tęsti","Iљeiti"); // parodome DIALOG langą, kad būtų kur suvesti sąskaitos slaptaћodį, o gal naudojame komanda ? :D
format(string,sizeof(string),"Sąskaita su vardu - (%s) yra uћregistruota. Praљome įvesti sąskaitos slaptaћodį norėdami prisijungti.",pName); // formatuojame textą
SendClientMessage(playerid,SPALVA_ORANDZINE,string); // paraљome suformatuotą textą.
}
else // jeigu nerado nieko apie vartotoją reiљkiasi jis neregistruotas, so we dump
{
ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Registracija","Registracijai įveskite slaptaћodį kurį naudosite kas kartą prisijungiant prie sąskaitos","Tęsti","Iљeiti"); // parodome DIALOGĄ kuriame uћregistruos savo slaptaћodį.
format(string,sizeof(string),"Sveikas atvykęs %s, tu љiame serveryje neturi sąskaitos, įvesk slaptaћodį norėdamas uћregistruoti.",pName); // formatuojame ћinutę, kad pasakyti ћaidėjui apie neturimą sąskaitą ir reikalingą registraciją.
SendClientMessage(playerid,SPALVA_ORANDZINE,string); // Siunčiame suformatuotą ћinutę klientui kuris to praљo.
}
mysql_free_result(); // paleidћiame visus paimtus duomenis, kai reiks vėl pasiimsime.
}
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
new query[300],pName[MAX_PLAYER_NAME]; // kintamieji uћklausoms bei vardui.
GetPlayerName(playerid,pName,sizeof(pName)); // paimame ћaidėjo vardą kuriam viską darysime.
if ( Logged[ playerid ] ) // jeigu ћaidėjas prisijungęs, tai yra jeigu jis suvędęs savo duomenis teisingai arba ką tik uћsiregistravęs ir automatiљkai prijungtas.
{
format(query,sizeof(query),"UPDATE `"TABLENAME"` SET `Pinigai`='%d' WHERE (`Vardas` = '%s')",GetPlayerMoney(playerid),pName); // iљsaugome ћaidėjo turimus pinigus į MYSQL duomenų bazę, kad kitą kartą atėjus jis gautu juos.
mysql_query(query); // siunčiame uћklausą duomenų bazei.
}
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == 1) // Jeigu dialogo id 1 tai yra jeigu jis nori registruotis.
{
if(response) // Jeigu įvedė slaptaћodį ir spaudћia tęsti.
{
if(strlen(inputtext) < 6) // jeigu slaptaћodis sudaro nemaћiau 6 simbolių. Vykdome toliau
{
ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Registracija","Registracijai įveskite slaptaћodį kurį naudosite kas kartą prisijungiant prie sąskaitos","Tęsti","Iљeiti"); // rodome vėl DIALOGĄ, kad galėtų pasitaisyti neteisingai įvestą slaptaћodį.
return SendClientMessage(playerid,SPALVA_ORANDZINE,"Slaptaћodis tūrėtų sūdaryti nemaћiau 6 simbolių, tai jūsų sąskaitos saugumui."); // praneљame ћaidėjui kuris suvedė neteisingai
}
new query[256], vardas[128]; // Stringai :D , uћklausai bei vardui.
GetPlayerName(playerid,vardas,128); // įdedame į kintamajį ћaidėjo vardą kurį naudosime atpaћinimui.
format(query,sizeof(query),"INSERT INTO `"TABLENAME"` (Vardas,Slaptazodis) VALUES ('%s',md5('%s'))",vardas,inputtext); // vykdome uћklausą kurioje suvesime norimus duomenis į MYSQL duom. Taip, pat naudojamės plugino funkcijomis ir uћkoduojame slaptaћodį - MD5
mysql_query(query); // padarome uћklausą.
Logged[playerid] = true; // Nustatome, kad ћaidėjas prisijungė automatiљkai. // Ћaidėjui sąskaitą sukurtą, padarome kintamajį true, kad serveris jį atpaћintų kaip prisijungusį.
SendClientMessage(playerid,SPALVA_ORANDZINE,"Uћsiregistravote sėkmingai, jūs automatiљkai prijungtas. Tęskite norint ћaisti."); // Visą ką aљ dabar pasakiau praneљame ћaidėjui paprastaja kalba (neskriptinimo) :D :D
}
else if(!response) // Jei ћaidėjas paspaudė buttoną iљeiti, tai metam jį iљ serverio, right ?
{
Kick(playerid); // Iљspiriame ћaidėja, todėl kad nenorėjo registruotis.
}
return 1;
}
if(dialogid == 2) // Jeigu ћaidėjas uћregistruotas ir norėtų prisijungti prie savo sąskaitos rodome jam dialogą id-2
{
if(response) // jai paspaus tęsti.
{
new vardas[128], query[256]; // Kintamieji vardui bei uћklausai.
GetPlayerName(playerid, vardas, 128); // gaunam zaidejo pavadinimą ir įdedame į kintamajį vardas :)
if(IsPlayerConnected(playerid)) // jeigu ћaidėjas prisijungęs
{
if(mysql_num_rows() == 1)// jeigu yra atitikmenų iљ uћklausos
{
format(query,sizeof(query), "SELECT * FROM `"TABLENAME"` WHERE `Name` = '%s'",GetPlayerName(playerid));
samp_mysql_query(query);
samp_mysql_store_result();
if(samp_mysql_fetch_row(result))
{
new tmp[MAX_STRING];
format(query,sizeof(query),"SELECT * FROM `"TABLENAME"` WHERE `Name` = '%s'",GetPlayerName(playerid));
samp_mysql_query(query);
samp_mysql_store_result();
if(!samp_mysql_fetch_row(result)) return 0;
//===========failu pakrovimai=============
samp_mysql_get_field("Money", tmp);
PlayerInfo[playerid][pCash] = strval(tmp);
GivePlayerMoney(playerid,PlayerInfo[playerid][pCash]);
samp_mysql_get_field("ID", tmp);
PlayerInfo[playerid][pSQID] = strval(tmp);
samp_mysql_get_field("Kills", tmp);
PlayerInfo[playerid][pKills] = strval(tmp);
samp_mysql_get_field("Deaths", tmp);
PlayerInfo[playerid][pDeaths] = strval(tmp);
PlayerInfo[playerid][pIsLogin] = true;
SendClientMessage(playerid,COLOR_WHITE,"Sveiki prisijunge");
}
else // jeigu nerado nieko tokio iљ duotosios uћklausos, reiљiasi jis neћino sąskaitos duomenų, arba netesingai įraљė.
{
mysql_free_result(); // paleidћiame duomenis, nes neteisingai paraљė.
ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Prisijungimas","Įveskite savo sąskaitos prisijungimo slaptaћodį:","Tęsti","Iљeiti"); // DUODAME dar љansą prisijungti, kad nereiktų jungtis į serverį iљ naujo.
return SendClientMessage(playerid,SPALVA_ORANDZINE,"Sąskaitos vartotojas neatpaћintas, greičiausiai slaptaћodis neatitiko."); // pranaљame klientui kas blogai, kodėl neprijungia jo prie sąskaitos.
}
}
else // kad iљvengti "commands out of sync" klaidų naudojame љitą
{
mysql_store_result(); // kad iљvengti "commands out of sync" klaidų naudojame љitą
mysql_free_result(); // kad iљvengti "commands out of sync" klaidų naudojame љitą
}
}
else if(!response) // Jai paspaude iљeiti, nenorėjo prisijungti.
{
Kick(playerid); // Spiriame lauk iљ serverio, nenori prisijungti.
return 1;
}
return 1;
}
}
return 1;
}