[Tutorial] Cum sa faci un sistem de logare/inregistrare!

In jos

[Tutorial] Cum sa faci un sistem de logare/inregistrare!

Mesaj Scris de .Nick la data de Mier 20 Noi 2013, 1:01 am

Salut la toti azi revin cu un nou tutorial la cererea lui Sa-Mp No Limit!
Iar titlul spune tot !
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 :

Cod:

#include <a_samp>
#include <dutils>
#include <dini>
Dupa acest pas va trebui sa definim playerinfo [pInfo] !

Cod:
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 !

Cod:

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 :

Cod:

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!


Cod:

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    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;
}
Cam acesta a fost tutorialul Sa-Mp No Limit sper ca l-ai inteles dar sper ca si voi l-ati inteles !


Tutorial creat de: NaGaz000r !
Sursa: http://www.sa-mp.ro/

avatar
.Nick
Administrator
Administrator

Mesaje : 187
Data de inscriere : 19/01/2008
Sanctiuni Sanctiuni :
  • 0 Avertismente


Vezi profilul utilizatorului http://samp.gettalk.net

Sus In jos

Sus

- Subiecte similare

 
Permisiunile acestui forum:
Nu puteti raspunde la subiectele acestui forum