lockLocked

Cum sa faci un sistem de logare/inregistrare!

person N!k3
schedule May 6, 2017
forum 1
visibility 20
May 6, 2017 at 1:08 PM
Original Post
#1
Member

Bun vom avea nevoie de 2 includeri : dini si dutils care ne vor ajuta pe parcursul lucrului!
Le downloadam le puteti gasi pe google !
Si incepem :

Pawno Code: [Select]
#include <a_samp>
#include <dutils>
#include <dini>

Dupa acest pas va trebui sa definim playerinfo [pInfo] !

Pawno Code: [Select]
enum pInfo[playerid] { // cu acest enum vom pune tot ce vrem sa stim despre player cand se inregistreaza //
AdminLevel, // daca are admin sau nu //
level, // levelul //
cash, // banii //
password, // parola jucatorului //
}
new PlayerInfo[MAX_PLAYER_NAME][pInfo] // adica ce am enumerat noi mai sus! //

Acuma ca am terminat trebuie sa mergem la OnPlayerConnect pentru a putea crea fisierul jucatorului si daca este inregistrat sau nu !

Pawno Code: [Select]
public OnPlayerConnect(playerid) {
new name[MAX_PLAYER_NAME], file[128]; // name - numele lui , file - fisierul lui!
GetPlayerName(playerid, name, MAX_PLAYER_NAME); // ii va verifica numele daca este inregistrat
format(file, sizeof(file), ".../Users/%s.ini", name); // locul unde se inregistreaza 
if(!fexist(file)) { // daca nu este inregistrat ii va trimite mesaj
SendClientMessage(playerid, 0xAA3333AA, "Nu esti inregistrat te rog inregistreaza-te!");
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Inregistreaza-te te rog!", "Introdu parola ", "Inregistreaza-te", "Iesi"); // acesta este dialogul in care-l va pune sa se inregistreze!
}
else {
new str[128]; // dar daca playerul este deja inregistrat il va pune sa se logheze!
GetPlayerName(playerid, name, MAX_PLAYER_NAME); // ii verifica numele
format(str, sizeof(str), "Bine ai venit inapoi pe server ~r~%s. Distreaza-te!", name); // Va primi un mesaj de bun venit inapoi!
SendClientMessage(playerid, 0xAA3333AA, str);
ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "Te rugam logheaza-te", "Introdu parola", "Login", "Cancel"); // si aici este dialogul in care se va loga jucatorul respectiv!
}
return 1;
}

Acuma daca vrem sa ii se salveze parola , adminlevel , level , cash mergem la linia OnPlayerDisconnect pentru a adauga niste comenzi simple de salvare a contului foarte usor si va voi explica cat mai clar cum trebuie facut aici sa incepem : 

Pawno Code: [Select]
public OnPlayerDisconnect(playerid, reason)
{
new file[128], name[MAX_PLAYER_NAME]; // noul fisier ce se va crea daca nu este inregistrat!
GetPlayerName(playerid, name, MAX_PLAYER_NAME); // ii va detecta numele!
format(file, sizeof(file), ".../Users/%s.ini", name); // iar aici i se va salva puteti modifica cum vreti voi!
if(dini_Exists(file)) { // Iar acum pur si simplu cu dini_IntSet vom salva ce am enumerat noi mai sus!
dini_IntSet(file, "password", PlayerInfo[playerid][password]); // parola jucatorului ..
dini_IntSet(file, "AdminLevel", PlayerInfo[playerid][AdminLevel]); // admin level //
dini_IntSet(file, "cash", PlayerInfo[playerid][cash]); // banii jucatorului //
dini_IntSet(file, "level", PlayerInfo[playerid][level]); // levelul jucatorului! // ATENTIE le puteti modifica sau puteti creea mai multe! //
}
return 1; // Si asta e tot am reusit sa salvam contul jucatorului //
}

Dar inca nu am terminat acuma urmeaza partea putin mai grea si anume OnDialogResponse adica dupa ce se logheaza sau se inregistreaza din acel moment sa ii se salveze tot!
Deci mergem la linia OnDialogResponse si vom adauga urmatoarele voi fii cat mai explicit!

Pawno Code: [Select]
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext&#91;])
{
if(dialogid == 1) { // Primul dialog cu id 1 este acel in care jucatorul isi introduce parola pentru a se inregistra !
new file[128], name[MAX_PLAYER_NAME], str[128]; // ii va crea un fiser de maxim 128 de caractere!
GetPlayerName(playerid, name, MAX_PLAYER_NAME); // ii va detecta numele pt salvare!
format(file, sizeof(file), ".../Users/%s.ini", name); // Aici este locul unde se va salva !
if(response) { // iar acuma dupa ce si- scirs parola i se va crea un fiser !
if(strlen(inputtext)) {
dini_Create(file); // Aceasta comanda ii va crea fisierul cu urmatoarele!
dini_IntSet(file, "password", num_hash(inputtext)); // parola jucatorul dar aceasta va fi criptata!
dini_IntSet(file, "AdminLevel", PlayerInfo[playerid][AdminLevel]); // adminul //
dini_IntSet(file, "cash", PlayerInfo[playerid][cash]); // Banii jucatorului //
dini_IntSet(file, "level", PlayerInfo[playerid][level]); // levelul //
format(str, sizeof(str), "Esti inregistrat ~r~%s. Parola ta este~r~%s.Nu o uita !", name, inputtext); // dupa ce se inregistreaza ii va trimite un mesaj cu parola si faptul ca s-a inregistrat cu succes//
SendClientMessage(playerid, 0xAA3333AA, str); // ii trimite jucatorului mesajul !//
PlayerInfo[playerid][level] = dini_Int(file, "level"); // levelul //
PlayerInfo[playerid][cash] = dini_Int(file, "cash"); // bani //
PlayerInfo[playerid][AdminLevel] = dini_Int(file, "AdminLevel"); // adminul //
}
}
else {
Kick(playerid); // iar daca da iesi si nu se inregistreaza va primi automat KICK!
}
}
if(dialogid == 2) { // iar acuma daca jucatorul este inregistrat va trebui sa se logheze!
new file[128], name[MAX_PLAYER_NAME], str[128]; // fisierul //
GetPlayerName(playerid, name, MAX_PLAYER_NAME); // ii detecteaza numele sa vada daca este inregistrat!
format(str, sizeof(str), ".../Users/%s.ini", name); // locul unde sunt conturile //
if(response) { // daca va scrie o parola gresita aceasta va fi verificata cu cea din fisier iar daca este incorecta ii va trimite mesaj cum ca a gresit parola!
if(strlen(inputtext)) {
if(num_hash(inputtext) != dini_Int(file, "password")) { // aici verifica parola //
SendClientMessage(playerid, 0xAA3333AA, "Parola este gresita!");
ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "Te rog logheaza-te!", "Introdu parola", "Login", "Cancel");
}
else {
SendClientMessage(playerid, 0xAA3333AA, "Te-ai logat cu succes distractie placuta pe server!");
PlayerInfo[playerid][level] = dini_Int(file, "level"); // dupa ce s-a logat ii va da playerului ce a avut dupa deconectare adica levelul
PlayerInfo[playerid][cash] = dini_Int(file, "cash"); // banii //
GivePlayerMoney(playerid, dini_Int(file, "cash")); // iar cu aceasta functie ii va da banii inapoi //
PlayerInfo[playerid][AdminLevel] = dini_Int(file, "AdminLevel"); // adminul //
}
}
}
else {
Kick(playerid); // daca greseste parola va primi kick //
}
}
return 1;
}

May 13, 2017 at 1:30 PM
#2
Member

Frate nu mai dati copy + paste de pe alte site-uri

 

Next warn

 

:tc:

 

Multimim de post.

Join the Discussion

You need to be logged in to post a reply.

loginLogin to Reply