Jump to content

Cum sa faci un sistem de logare/inregistrare!


NaGaz000r

Recommended Posts

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 :

[pawn]#include <a_samp>

#include <dutils>

#include <dini>[/pawn]

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

[pawn]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! //[/pawn]

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

[pawn]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;

}[/pawn]

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 :

[pawn]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 //

}[/pawn]

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!

[pawn]

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;

}[/pawn]

Cam acesta a fost tutorialul Sa-Mp No Limit sper ca l-ai inteles dar sper ca si voi l-ati inteles !

Voi reveni cu alte tutoriale deoarece nu prea am ce face in timpul vacantei ...

Astept pareri bune / rele !

Daca am gresit corecta-ti-ma va rog !

Va multumesc !

Daca ai nevoie de ajutor add : FX_CUVEE!

<a href="http://www.game-state.com/84.247.54.173:7777/"><img src="http://www.game-state.com/84.247.54.173:7777/n-560x95_FFFFFF_FFFFFF_000000_000000.png" alt="www.Game-State.com" style="border-style: none;" />

Link to comment
Share on other sites

Multumesc !

Astept si alte pareri!

Daca ai nevoie de ajutor add : FX_CUVEE!

<a href="http://www.game-state.com/84.247.54.173:7777/"><img src="http://www.game-state.com/84.247.54.173:7777/n-560x95_FFFFFF_FFFFFF_000000_000000.png" alt="www.Game-State.com" style="border-style: none;" />

Link to comment
Share on other sites

Scuze m-am grabit !

Si mie imi place sa folosesc dini :| mi se pare mai usor

fiecare in stilul lui!

Daca ai nevoie de ajutor add : FX_CUVEE!

<a href="http://www.game-state.com/84.247.54.173:7777/"><img src="http://www.game-state.com/84.247.54.173:7777/n-560x95_FFFFFF_FFFFFF_000000_000000.png" alt="www.Game-State.com" style="border-style: none;" />

Link to comment
Share on other sites

Multumesc mult , dar mie mi se pare usor cu dini !

Daca ai nevoie de ajutor add : FX_CUVEE!

<a href="http://www.game-state.com/84.247.54.173:7777/"><img src="http://www.game-state.com/84.247.54.173:7777/n-560x95_FFFFFF_FFFFFF_000000_000000.png" alt="www.Game-State.com" style="border-style: none;" />

Link to comment
Share on other sites

De ce te apuci sa scrii un tutorial daca nu ai cunostintele necesare?!

Le dai altora informatii gresite...

Nu am stat sa citesc tot tutorialul pentru ca a fost de-ajuns sa vad a doua bucata de cod pusa de tine acolo...

Fa o diferenta intre ce ai scris tu si ce scriu eu:

enum pInfo 
{ 
	AdminLevel,
	Level,
	Cash,
	Password
};

new PlayerInfo[MAX_PLAYERS][pInfo];

Imi pare rau, dar nu poti sa te apuci de scris tutoriale cand tu nu stii sa faci nici macar pentru tine!

Link to comment
Share on other sites

am pus o virgula din greseala se putea intampla oricui ...marele scripter ce esti tu

Daca ai nevoie de ajutor add : FX_CUVEE!

<a href="http://www.game-state.com/84.247.54.173:7777/"><img src="http://www.game-state.com/84.247.54.173:7777/n-560x95_FFFFFF_FFFFFF_000000_000000.png" alt="www.Game-State.com" style="border-style: none;" />

Link to comment
Share on other sites

Frumos ai +1 de la mine. Mi-a folosit pt Register ca Login am. :D

Ai un 4.98/5, si tine-o tot asa!

Edit: Ajutatima am niste errori si warning ajutor!!!

[pawn]C:\Documents and Settings\----\Desktop\Sa-MP Servers\filterscripts\Database.pwn(16) : warning 235: public function lacks forward declaration (symbol "OnPlayerConnect")

C:\Documents and Settings\----\Desktop\Sa-MP Servers\filterscripts\Database.pwn(18) : warning 219: local variable "name" shadows a variable at a preceding level

C:\Documents and Settings\----\Desktop\Sa-MP Servers\filterscripts\Database.pwn(18) : error 017: undefined symbol "MAX_PLAYER_NAME"

C:\Documents and Settings\----\Desktop\Sa-MP Servers\filterscripts\Database.pwn(18) : error 029: invalid expression, assumed zero

C:\Documents and Settings\----\Desktop\Sa-MP Servers\filterscripts\Database.pwn(18) : error 017: undefined symbol "file"

C:\Documents and Settings\----\Desktop\Sa-MP Servers\filterscripts\Database.pwn(18) : fatal error 107: too many error messages on one line

Compilation aborted.Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase

4 Errors.[/pawn]

Rezolvat!!! Nu aveam #endif. :))

Link to comment
Share on other sites

  • 2 months later...
  • 2 weeks later...

Salut, Eu am urmat toti pasi tai.. dar am primit niste erori,

Acestea sunt errorile:

C:\Documents and Settings\Geana\Desktop\Server-ul meu\gamemodes\Gamemode.pwn(468) : error 021: symbol already defined: "name"

C:\Documents and Settings\Geana\Desktop\Server-ul meu\gamemodes\Gamemode.pwn(472) : error 017: undefined symbol "PlayerInfo"

C:\Documents and Settings\Geana\Desktop\Server-ul meu\gamemodes\Gamemode.pwn(472) : warning 215: expression has no effect

C:\Documents and Settings\Geana\Desktop\Server-ul meu\gamemodes\Gamemode.pwn(472) : error 001: expected token: ";", but found "]"

C:\Documents and Settings\Geana\Desktop\Server-ul meu\gamemodes\Gamemode.pwn(472) : error 029: invalid expression, assumed zero

C:\Documents and Settings\Geana\Desktop\Server-ul meu\gamemodes\Gamemode.pwn(472) : fatal error 107: too many error messages on one line

Compilation aborted.Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase

5 Errors.

Help me', Ofer +1 La cine ma ajuta :!)

Link to comment
Share on other sites

Salut, Eu am urmat toti pasi tai.. dar am primit niste erori,

Acestea sunt errorile:

C:\Documents and Settings\Geana\Desktop\Server-ul meu\gamemodes\Gamemode.pwn(468) : error 021: symbol already defined: "name"

C:\Documents and Settings\Geana\Desktop\Server-ul meu\gamemodes\Gamemode.pwn(472) : error 017: undefined symbol "PlayerInfo"

C:\Documents and Settings\Geana\Desktop\Server-ul meu\gamemodes\Gamemode.pwn(472) : warning 215: expression has no effect

C:\Documents and Settings\Geana\Desktop\Server-ul meu\gamemodes\Gamemode.pwn(472) : error 001: expected token: ";", but found "]"

C:\Documents and Settings\Geana\Desktop\Server-ul meu\gamemodes\Gamemode.pwn(472) : error 029: invalid expression, assumed zero

C:\Documents and Settings\Geana\Desktop\Server-ul meu\gamemodes\Gamemode.pwn(472) : fatal error 107: too many error messages on one line

Compilation aborted.Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase

5 Errors.

Help me', Ofer +1 La cine ma ajuta :!)

Daca ai probleme posteaza la "Discutii Scripting " .

In acest Topic se posteaza parerile despre Tutorial . !

 

Link to comment
Share on other sites

  • 7 months later...

Cum fac sa se vada parola cand intri in Scriptfiles/users? se vad vro 7 numere de genu : Key=3098621

Citez:

"Stiu ca multi vreti sa aflati parolele utilizatorilor vostri, dar eu nu va recomand sa faceti asta, pentru ca va compromiteti profesionalitatea serverului si nu va mai avea nimeni incredere in voi, si vor evita acel server, daca se descopera ca faceti asta. In opinia mea securitatea este mult peste interesul propriu. Eu unul folosesc cea mai grea metoda de salvare a unei parole, care am s-o v-o explic mai jos, nimeni nu poate sparge parolele cu acea metoda."

7bdea99b11.png

rimmon curv.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more details you can also review our Terms of Use and Privacy Policy.