Mysql Sistem de înregistrare
#include
#include
Pentru a defini toate, adăugați:
#define gazdă "localhost" // acesta va fi gazda dvs. mysql. În mod implicit, pentru xampp-localhost
#define user "root" // acesta va fi numele de utilizator mysql. Valoarea implicită pentru xampp este rădăcina
#define db "server" // numele bazei de date. Amintiți-vă, am creat o bază de date numită înainte de server.
#define pass "" // aceasta este parola dvs. mysql. În xampp, parola nu a fost setată. Așa că lăsați-o goală.
Pentru variabilele globale:
static mysql. // această variabilă va fi utilizată pentru a controla baza de date
nume # 91; MAX_PLAYERS # 93; # 91; 24 # 93; // vom folosi această variabilă pentru a stoca numele jucătorului.
IP # 91; MAX_PLAYERS # 93; # 91; 16 # 93; // vom folosi această variabilă pentru a stoca IP player-ul.
;
nativ WP_Hash (tampon # 91; # 93; len. const str # 91; # 93;);
enum PDATA
ID-ul. // Va fi folosit mai târziu pentru a stoca ID-ul jucătorului din baza de date, astfel încât să îl putem folosi oriunde mai târziu
parolă # 91; 129 # 93; // Noi vom încărca parola jucătorului în această variabilă din baza de date
Admin. // Vom încărca player-ul la nivel de administrator din baza de date în această variabilă, astfel încât să o putem folosi în orice loc mai târziu.
VIP. // Vom încărca nivelul VIP al playerului din baza de date în această variabilă, astfel încât să îl putem folosi oriunde într-o perioadă ulterioară.
Bani. // Vom încărca banii jucătorului din baza de date în această variabilă, astfel încât să îl putem folosi în orice loc mai târziu.
Float. posX. // Vom încărca playerul X din baza de date în această variabilă, astfel încât să îl putem folosi în orice loc mai târziu.
Float. posy. // Vom încărca player-ul poziției Y din baza de date în această variabilă, astfel încât să o putem folosi în orice loc mai târziu.
Float. posZ // Vom încărca pozițiile playerului Z din baza de date în această variabilă, astfel încât să o putem folosi oriunde pe viitor.
noul pInfo # 91; MAX_PLAYERS # 93; # 91; pdata # 93 ;; // Variabila care stochează enumeratorul de mai sus
În public OnGameModeInit ():
mysql_log (LOG_ERROR | LOG_WARNING | LOG_DEBUG); // Să permitem depanarea, astfel încât să putem identifica problemele (dacă există)
mysql = mysql_connect (gazdă, utilizator, db, pass); // Această funcție va conecta serverul la baza de date. Rețineți că am definit gazda, numele de utilizator al bazei de date și parola. E timpul să-l folosești aici.
dacă (mysql_errno (mysql)! = 0) print ("Nu s-a putut conecta la baza de date!"); // Aceasta va indica dacă conexiunea la baza de date este reușită sau nu. Dacă nu este cazul, verificați gazda, numele de utilizator al bazei de date și parola. Asigurați-vă că sunt în regulă
În public OnPlayerConnect (playerid):
noua interogare # 91; 128 # 93 ;; // Folosim această variabilă în formatul de interogare
GetPlayerName (numele jucatorului # 91; playerid # 93; 24); // Obține numele jucătorului
GetPlayerIp (playerid IP # 91; playerid # 93; 16); // Obținerea unui player IP
mysql_format (mysql .query. sizeof (interogare), "SELECT` Password", `ID` FROM` jucători `Unde` Username` = '% e' LIMIT 1 ". # 91; playerid # 93;);
// - Folosim mysql_format în loc de format, pentru că putem folosi calificativul% e. % e specificatorul scapă de șir, astfel încât să putem evita SQL-injection, ceea ce înseamnă că nu ar trebui să folosim mysql_real_escape_string
// - Formatarea cererii noastre; SELECT `Password`,` ID` din `players` WHERE` Username` =„% e“înseamnă că vom alege o parolă și ID-o coloană într-un tabel care are numele unui jucător în coloana„nume de utilizator.
// - LIMIT 1; Avem nevoie doar de un rezultat care să fie afișat
mysql_tquery (mysql.query. "OnAccountCheck".
// vă permite să executați o cerere formatată și atunci când ați terminat, va fi apelat callback-ul OnAccountCheck
// Puteți apela un apel invers așa cum vă place
La sfârșitul scriptului, creați publicul:
înainte OnAccountLoad (playerid);
înainte OnAccountRegister (playerid);
public OnAccountLoad (playerid)
pInfo # 91; playerid # 93; # 91; admin # 93; = cache_get_field_content_int (0. "Admin"); // obținem câmpul 4 din rândul 0. Și din moment ce acesta este un număr întreg, folosim cache_get_row_int
pInfo # 91; playerid # 93; # 91; VIP # 93; = cache_get_field_content_int (0. "VIP"); // Sus
pInfo # 91; playerid # 93; # 91; bani # 93; = cache_get_field_content_int (0. "Money"); // Sus
pInfo # 91; playerid # 93; # 91; posX # 93; = cache_get_field_content_float (0. "PosX"); // Din poziția jucătorului este un flotor, folosim cache_get_field_content_float
pInfo # 91; playerid # 93; # 91; buchet de flori # 93; = cache_get_field_content_float (0. "PosY"); // Sus
pInfo # 91; playerid # 93; # 91; Posz # 93; = cache_get_field_content_float (0. "PosZ"); // Sus
GivePlayerMoney (juc # 91; playerid # 93; # 91; bani # 93;); // Stabiliți banii
SendClientMessage (numele jucătorului - 1. "Logare reușită!"); // spune-le că au intrat cu succes
retur 1;
>
public OnAccountRegister (playerid)
pInfo # 91; playerid # 93; # 91; ID-ul # 93; = cache_insert_id (); // Încarcă ID-ul jucătorului într-o variabilă după ce este înregistrat.
printf ("Cont nou înregistrat ID:". pInfo # 91; playerid # 93; # 91; ID-ul # 93;); // doar pentru depanare.
retur 1;
>
În publicul OnDialogResponse (playerid, dialogid, răspuns, listitem, inputtext []):
În public OnPlayerDisconnect (playerid, motiv):
noua interogare # 91; 128 # 93; Float. pos # 91; 3 # 93 ;; // interogare # 91; 128 # 93; pentru formatul cererii noastre și Float: pos # 91; 3 # 93; Pentru a primi și a salva poziția unui jucător
GetPlayerPos (playerid Poz # 91; 0 # 93; poz # 91; 1 # 93; poz # 91; 2 # 93;); // Să obținem pozițiile jucătorului când părăsesc serverul
mysql_format (mysql. interogare. sizeof (interogare), „UPDATE` players` SET` Admin` =., `VIP` =.,` Money` =., `posX` =% f,` posY` =% f, ` posZ` =% f WHERE "ID" =. ", \
pInfo # 91; playerid # 93; # 91; admin # 93 ;, pInfo # 91; playerid # 93; # 91; VIP # 93 ;, pInfo # 91; playerid # 93; # 91; bani # 93; poz # 91; 0 # 93; poz # 91; 1 # 93; poz # 91; 2 # 93 ;, pInfo # 91; playerid # 93; # 91; ID-ul # 93;);
// Actualizați tabelul ("jucători"), obțineți player-ul la nivel de administrator, nivelul VIP, banii și postările și salvați-le în baza de date
mysql_tquery (interogare mysql. "". "");
// executați interogarea.
În public OnPlayerSpawn (playerid):
SetPlayerPos (playerid.pInfo # 91; playerid # 93; # 91; posX # 93 ;, pInfo # 91; playerid # 93; # 91; buchet de flori # 93 ;, pInfo # 91; playerid # 93; # 91; Posz # 93;);
// Setați poziția jucătorului în ultima poziție salvată.