Labas vakaras forumiečiai, taigi matau šita MySQL skiltis yra vis dar tuščia taigi nusprendžiau parašyti šiokia tokia pamoka kuri manau kam nors bet pravers. Taigi pradedam
Mums reikės dviejų include, tai:
<a_mysql> ir <sscanf>
Dabar pasijungiame šituos include:
#include <a_mysql> /// MySQL Includas #include <sscanf2> /// Šitas includas išveda informacija
Dabar mes turime parašyti prisijungimo prie duomenų bazės kodą (kad susikurti DB savo PC galite naudoti įvairias programas tokias kaip DENWER,WAMP,XAMP ir kt.) Taigi o dabar prisijungimas:
#define SQL_HOST "localhost" //Jeigu DB Jūsų PC tai rašote localhost, o jeigu ant hosto tai įrašote hosto IP #define SQL_DB "serveris" //Duomenų bazės pavadinimas. #define SQL_USER "Vartotojas" //Duomenų bazės vartotojas. #define SQL_PASS "Slaptažodis" //Duomenų bazės slaptažodis. #define TABLE_ACCOUNT "Acountai" //Lentelės pavadinimas kur bus laikomi serverio vartotojai.
Dabar kur nors modo viršuje sukuriame masyvą, kur bus laikomi visi duomenys:
enum pInfo { pID, pPassword[256], pAdmin, pVip, pMoney, pSkin, pDirektorius, pBan, pJail } new Player [MAX_PLAYERS] [pInfo]; new query;
Einam toliau, na ką gi, dabar susirandame tokį callback'ą: "OnPlayerConnect(playerid)" ir po juo dedame:
for(new i, i < 20; i++) SendClientMessage(playerid, -1, "Tu neesi užsiregistravęs, padaryk tai"); ShowPlayerDialog(playerid,111,DIALOG_STYLE_MSGBOX,"{Jūsų spalva}Serveris", "{Jūsų spalva}Sveiki atvykę į Mūsų Serverį");
Dabar reikia sukurti patį dialogą, pas mus jo ID yra 111:
if(dialogid == 111) ; { if(response) { new pname[256]; //Vartotojo vardo kintamasis GetPlayerName(playerid, pname, sizeof(pname)) ; // Šita f-cija sužino vartotojo vardą ir įrašo jį. format(query, sizeof(query), "SELECT * FROM "TABLE_ACCOUNT" WHERE name = '%s'", pname) ; Šita f-cija suranda vartotojo vardą Duomenų Bazėje. mysql_query (query) ; //Siunčiam užklausa. mysql_store_result ; if(mysql_fetch_row_format(query)) ; //Jeigu yra toks vartotojas jam rodo šitą: { ShowPlayerDialog(playerid, 0, DIALOG_STYLE_INPUT, "{Spalva}Serveris{Spalva}", " {Spalva}Iveskite savo slaptažodįn {Spalva}Jūsų paskyra {Spalva}jau yra Duomenų Bazėje{Spalva}.", "Gerai", "Išeit") ; } else { // O čia dialogas jeigu vartotojo dar nėra įrašyto duomenų bazėje. ShowPlayerDialog(playerid, 0, DIALOG_STYLE_INPUT, "{Spalva}Serveris{Spalva}", "{Spalva}Norėdami užsiregistruoti, įveskite slaptažodį"{Spalva}." , "Gerai", "Išeit") ; } } }
Apačioje pridedam dialogą:
if(dialogid == 0) //Jeigu žaidėjas jau yra užregistruotas { if(response) { if(strlen(inputtext) != 0) // { new pname2[MAX_PLAYER_NAME]; // Rodom žaidėjo Nicką. GetPlayerName(playerid, pname2, MAX_PLAYER_NAME); // Šita f-ija išgauna Nicką. if(!strcmp(inputtext, GetAccount(pname2, "password"), true)) OnPlayerLogin(playerid); // Jeigu slaptažodis atitinka, prijungiam žaidėja else // Jeigu įvestas neteisingas slaptažodis, rodome langą dar kartą: { ShowPlayerDialog(playerid, 0, DIALOG_STYLE_INPUT, "{DAA520}Serveris{DAA520}", " {0000FF}Įveskite slaptžodįn {0000FF}Jusu accountas {0000FA}užregistruotas{0000FA} .","Gerai", "Išeit"); } } else // Jeigu žaidėjas tiesiog paspaudė Gerai, išmetame langą dar kartą. { ShowPlayerDialog(playerid, 0, DIALOG_STYLE_INPUT, "{0000FF}Įveskite slaptažodįn{0000FF}Jusu accountas{0000FA}nėra užregistruotas{0000FA} .","Gerai", "Išeit"); } } else //Jeigu žaidėjas paspaudė įšeit, išmetam jį iš serverio: { Kick(playerid); // } }
Po šituo pridedam:
if(dialogid == 1) //Jeigu žaidėjas dar nėra užsiregistravęs. { if(response) { if(strlen(inputtext) != 0) // Jeigu įvedė slaptažodį { OnPlayerRegister(playerid,inputtext); // Registruojam ji } else // Jeigu nieko neįrašė išmetam jam dialogą { ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "{DAA520}Serveris{DAA520}", "{0000FF}Norėdami užsiregistruoti, įveskite slaptažodįn{0000FF}Jūsų vartotojas{0000FA}sukurtas{0000FA} .", "Gerai", "Išeit"); } } else { Kick(playerid); // Jeigu paspaudė Išeit, tai ir išmetame ji } }
Einam toliau ir susirandame "OnGameModeInit" ir jame rašome:
stock OnPlayerLogin(playerid) { new pname[256]; GetPlayerName(playerid, pname, sizeof(pname)); format(query,sizeof(query), "SELECT * FROM "TABLE_ACCOUNT" WHERE name = '%s' LIMIT 1",pname); mysql_query(query); mysql_store_result(); if(mysql_fetch_row(query) == 1) { sscanf(query, "p<|>s[32]s[32]iiiiiiiiiiiiiiii", pname, Player[playerid][pPassword], Player[playerid][pID], Player[playerid][pAdmin], Player[playerid][pMoney], Player[playerid][pVip], Player[playerid][pSkin], Player[playerid][pDirektorius], Player[playerid][pBan], Player[playerid][pJail] ); mysql_free_result(); } if(Player[playerid][pBan] == 1) { SendClientMessage(playerid,COLOR_RED,"x {FFFFAA}Jus esate išbanintas mūsų serveryje."); Kick(playerid); } if(Player[playerid][pVip] >= 1) { new strin[200]; format(strin, sizeof(strin), "{FFFFAA}Sveikas atvykes Vip'e {FFFFAA}.", Player[playerid][pVip]); SendClientMessage(playerid,COLOR_LIGHTRED,strin); } if(Player[playerid][pAdmin] >= 1) { new strin[200]; format(strin, sizeof(strin), "{FFFFAA}Sveiki prisijunge Administratoriau {FFFFAA}.", Player[playerid][pAdmin]); SendClientMessage(playerid,COLOR_LIGHTRED,strin); } new strin[200]; format(strin, sizeof(strin), "{FFFFAA}Sveiki atvyke į mūsų server, {FFFFAA}%s.", GetPlayerName(playerid)); SendClientMessage(playerid,COLOR_LIGHTRED,strin); SetSpawnInfo(playerid, 255, 0, 0, 0, 0, 1.0, -1, -1, -1, -1, -1, -1); ServerGivePlayerMoney(playerid, Player[playerid][pMoney]); SpawnPlayer(playerid); }
stock OnPlayerRegister(playerid, pass[]) { new pname[256]; GetPlayerName(playerid, pname, sizeof(pname)); format(query, sizeof(query), "INSERT INTO "TABLE_ACCOUNT" (name, password) VALUES ('%s', '%s')" // įrašome į lentelę žaidėjo vardą ir slaptažodį ,pname, pass); mysql_query(query); }
stock OnPlayerSave(playerid) { if(IsPlayerConnected(playerid)) { new src[1024], pname[256]; GetPlayerName(playerid, pname, sizeof(pname)); format(query,sizeof(query),"UPDATE "TABLE_ACCOUNT" SET "); format(src,sizeof(src),"password=%i,",Player[playerid][pPassword]); strcat(query,src,sizeof(query)); format(src,sizeof(src),"userid=%i,",Player[playerid][pID]); strcat(query,src,sizeof(query)); format(src,sizeof(src),"admin=%i,",Player[playerid][pAdmin]); strcat(query,src,sizeof(query)); format(src,sizeof(src),"money=%i,",GetPlayerMoney(playerid)); strcat(query,src,sizeof(query)); format(src,sizeof(src),"vip=%i,",Player[playerid][pVip]); strcat(query,src,sizeof(query)); format(src,sizeof(src),"skin=%i,",Player[playerid][pSkin]); strcat(query,src,sizeof(query)); format(src,sizeof(src),"direktorius=%i,",Player[playerid][pDirektorius]); strcat(query,src,sizeof(query)); format(src,sizeof(src),"jail=%i,",Player[playerid][pJail]); strcat(query,src,sizeof(query)); format(src,sizeof(src),"Ban=%i",Player[playerid][pBan]); strcat(query,src,sizeof(query)); format(src,sizeof(src)," WHERE name='%s'",pname); strcat(query,src,sizeof(query)); mysql_query(query); } else SendClientMessage(playerid,COLOR_WHITE,""); }
stock GetAccount(username[], obtaining[]) { new QueryAcc[255]; format(QueryAcc, sizeof(QueryAcc), "SELECT %s FROM "TABLE_ACCOUNT" WHERE name = '%s' LIMIT 1", obtaining, username); mysql_query(QueryAcc); mysql_store_result(); if(mysql_fetch_row(QueryAcc) == 1) { mysql_free_result(); return QueryAcc; } return QueryAcc; }
Štai ir viskas. Jeigu norite kažką išmokti daryti, patariu daryti patiems o ne nukopijuoti grynai kodą. Bėje jeigu nukopijuosite grynai šitą kodą gausite klaidų dėl spalvų ir kt. Tikiuosi nors kažkam padėjau. Sėkmės.