Login system funktioniert nicht richtig

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hallo Community!
    Ich habe eineige probleme mit dem Login/Register system.


    1.) Wenn ich mich registriere und wieder einlogge habe ich automatisch Level 1 und 1dollar....
    2.) Wenn ich Registriert bin und mich wieder einlogge aber ein falsches passwort eingebe trotzdem lässt er mich einloggen ?(


    Ich schicke euch nun meine stocks und das zeug bei OnDialogResponse


    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid == DIALOG_LOGIN)
    {
    if(response)
    {
    if(!strlen(inputtext))
    {
    new string[128];
    SendClientMessage(playerid,COLOR_ROT,"{AAAAAA}Das eingegebene {37FF00}Passwort {AAAAAA}war {FF0005}Falsch, {AAAAAA}bitte geben sie Ihr {37FF00}richtiges Passwort{AAAAAA} ein.");
    format(string,sizeof(string),"{AAAAAA}Herzlich Willkommen zurück {FFFF00}%s. {AAAAAA}\nBitte geben sie Ihr{37FF00} Passwort{AAAAAA} ein.",SpielerName(playerid));
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Login",string,"Login","Abbrechen");
    }
    else
    {
    Login(playerid,inputtext);
    }
    return 1;
    }
    else
    {
    SendClientMessage(playerid,COLOR_GRAU,"Sie haben den Vorgang abgebrochen!");
    Kick(playerid);
    }
    return 1;
    }
    if(dialogid == DIALOG_REGISTER)
    {
    if(response)
    {
    if(!strlen(inputtext))
    {
    SendClientMessage(playerid,COLOR_GRAU,"Das Passwort war nicht lang genug.");
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Registrieren","Dein Account wurde nicht in der Datenbank gefunden.\nBitte geben sie Ihr gewünschtes Passwort ein.","Register","Abbrechen");
    return 1;
    }
    else
    {
    Register(playerid,inputtext);
    }
    return 1;
    }
    else
    {
    SendClientMessage(playerid,COLOR_GRAU,"Sie haben den Vorgang abgebrochen!");
    Kick(playerid);
    }
    return 1;
    }
    return 1;
    }



    stock Register(playerid, key[])
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    new Spielerdatei[264];
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
    dini_Create(Spielerdatei);
    dini_Set(Spielerdatei,"Passwort",key);
    SendClientMessage(playerid,COLOR_GRAU,"Sie haben sich erfolgreich Registriert.");
    dini_IntSet(Spielerdatei,"Level",0);
    return 1;
    }


    stock Login(playerid, key[])
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    new Spielerdatei[264];
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
    if(!strcmp(key,dini_Get(Spielerdatei,"Passwort"),false))
    {
    LadeAccount(playerid);
    SendClientMessage(playerid,COLOR_GRAU,"Sie haben sich erfolgreich eingeloggt.");
    }
    else
    {
    new string[128];
    SendClientMessage(playerid,COLOR_ROT,"{AAAAAA}Das eingegebene {37FF00}Passwort {AAAAAA}war {FF0005}Falsch, {AAAAAA}bitte geben sie Ihr {37FF00}richtiges Passwort{AAAAAA} ein.");
    format(string,sizeof(string),"{AAAAAA}Herzlich Willkommen zurück {FFFF00}%s. {AAAAAA}\nBitte geben sie Ihr{37FF00} Passwort{AAAAAA} ein.",SpielerName(playerid));
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Login",string,"Login","Abbrechen");
    }
    return 1;
    }


    stock LadeAccount(playerid)
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    new Spielerdatei[264];
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
    pInfo[playerid][plevel] = SetPlayerScore(playerid,dini_Int(Spielerdatei,"Level"));
    pInfo[playerid][pgeld] = GivePlayerMoney(playerid,dini_Int(Spielerdatei,"Geld"));
    pInfo[playerid][padmin] = dini_Int(Spielerdatei,"Adminlevel");
    pInfo[playerid][premium] = dini_Int(Spielerdatei,"Premium");
    pInfo[playerid][pbanned] = dini_Int(Spielerdatei,"Banned");
    pInfo[playerid][pwarn] = dini_Int(Spielerdatei,"Warns");
    pInfo[playerid][pskin] = dini_Int(Spielerdatei,"Skin");
    pInfo[playerid][pleader] = dini_Int(Spielerdatei,"Leader");
    pInfo[playerid][pmember] = dini_Int(Spielerdatei,"Member");
    pInfo[playerid][prang] = dini_Int(Spielerdatei,"Rang");
    pInfo[playerid][pmute] = dini_Int(Spielerdatei,"Mute");
    fsInfo[playerid][Fuehrerschein] = dini_Int(Spielerdatei,"Führerschein");
    fsInfo[playerid][Mottoradschein] = dini_Int(Spielerdatei,"Mottoradschein");
    fsInfo[playerid][Bootschein] = dini_Int(Spielerdatei,"Bootschein");
    fsInfo[playerid][Angelschein] = dini_Int(Spielerdatei,"Angelschein");
    fsInfo[playerid][Flugschein] = dini_Int(Spielerdatei,"Flugschein");
    fsInfo[playerid][Waffenschein] = dini_Int(Spielerdatei,"Waffenschein");
    if(pInfo[playerid][pbanned] == 1)
    {
    SendClientMessage(playerid,COLOR_GRAU,"Du bist vom Server gebannt.");
    Kick(playerid);
    }
    pInfo[playerid][plogged] = 1;
    return 1;
    }


    stock SpielerSpeichern(playerid)
    {
    if(pInfo[playerid][plogged] == 1)
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    new Spielerdatei[264];
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
    dini_IntSet(Spielerdatei,"Level",pInfo[playerid][plevel]);
    dini_IntSet(Spielerdatei,"Geld",pInfo[playerid][pgeld]);
    dini_IntSet(Spielerdatei,"Adminlevel",pInfo[playerid][padmin]);
    dini_IntSet(Spielerdatei,"Premium",pInfo[playerid][premium]);
    dini_IntSet(Spielerdatei,"Banned",pInfo[playerid][pbanned]);
    dini_IntSet(Spielerdatei,"Warns",pInfo[playerid][pwarn]);
    dini_IntSet(Spielerdatei,"Skin",pInfo[playerid][pskin]);
    dini_IntSet(Spielerdatei,"Leader",pInfo[playerid][pleader]);
    dini_IntSet(Spielerdatei,"Member",pInfo[playerid][pmember]);
    dini_IntSet(Spielerdatei,"Rang",pInfo[playerid][prang]);
    dini_IntSet(Spielerdatei,"Mute",pInfo[playerid][pmute]);
    dini_IntSet(Spielerdatei,"Führerschein",fsInfo[playerid][Fuehrerschein]);
    dini_IntSet(Spielerdatei,"Mottoradschein",fsInfo[playerid][Mottoradschein]);
    dini_IntSet(Spielerdatei,"Bootschein",fsInfo[playerid][Bootschein]);
    dini_IntSet(Spielerdatei,"Angelschein",fsInfo[playerid][Angelschein]);
    dini_IntSet(Spielerdatei,"Flugschein",fsInfo[playerid][Flugschein]);
    dini_IntSet(Spielerdatei,"Waffenschein",fsInfo[playerid][Waffenschein]);
    }
    return 1;
    }

  • Auf Anfrage in PM:


    pInfo[playerid][plevel] = SetPlayerScore(playerid,dini_Int(Spielerdatei,"Level"));
    pInfo[playerid][pgeld] = GivePlayerMoney(playerid,dini_Int(Spielerdatei,"Geld"));

    zu:
    pInfo[playerid][plevel] = dini_Int(Spielerdatei,"Level");
    SetPlayerScore(playerid,pInfo[playerid][plevel] );
    pInfo[playerid][pgeld] = dini_Int(Spielerdatei,"Geld");
    GivePlayerMoney(playerid,pInfo[playerid][pgeld]);


    Wegen dem Login: Steht das richtige Passwort in der Datei?

  • Dann füge unter Login, also im stock vor der Abfrage:
    if(!strcmp(key,dini_Get(Spielerdatei,"Passwort"),false))
    das da ein:
    printf("key:%s = get:%s",key,dini_Get(Spielerdatei,"Passwort"));


    Und zeig uns was geprintet wird, wenn du dich einloggst.

  • printf("key:%s = get:%s",key,dini_Get(Spielerdatei,"Passwort"));


    Dann füge unter Login, also im stock vor der Abfrage:
    if(!strcmp(key,dini_Get(Spielerdatei,"Passwort"),false))
    das da ein:
    printf("key:%s = get:%s",key,dini_Get(Spielerdatei,"Passwort"));


    Und zeig uns was geprintet wird, wenn du dich einloggst.


    Also was mir aufgefallen ist das er garnicht abfragt vonwo er das Passwort auslesen soll.
    Das hat geprintet..

    Code
    key:pascal = get:
  • Pfad richtig geschrieben bei dem Passwort-Check?


    "/Accounts/%s.txt"


    Wie sieht es in der Datei aus? Alles richtig geschrieben?


    dini_Get(Spielerdatei,"Passwort")
    das gibt dir nichts zurück. Entweder liegt der Fehler beim Pfad (Spielerdatei) oder beim Stat (Passwort). Eins davon ist falsch. Prüfe das mal.

  • stock Register(playerid, key[])
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    new Spielerdatei[264];
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
    dini_Create(Spielerdatei);
    dini_Set(Spielerdatei,"Passwort",key);
    SendClientMessage(playerid,COLOR_GRAU,"Sie haben sich erfolgreich Registriert.");
    dini_IntSet(Spielerdatei,"Level",0);
    return 1;
    }


    stock Login(playerid, key[])
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    new Spielerdatei[264];
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
    printf("key:%s = get:%s",key,dini_Get(Spielerdatei,"Passwort"));
    if(!strcmp(key,dini_Get(Spielerdatei,"Passwort"),false))
    {
    LadeAccount(playerid);
    SendClientMessage(playerid,COLOR_GRAU,"Sie haben sich erfolgreich eingeloggt.");
    }
    else
    {
    new string[128];
    SendClientMessage(playerid,COLOR_ROT,"{AAAAAA}Das eingegebene {37FF00}Passwort {AAAAAA}war {FF0005}Falsch, {AAAAAA}bitte geben sie Ihr {37FF00}richtiges Passwort{AAAAAA} ein.");
    format(string,sizeof(string),"{AAAAAA}Herzlich Willkommen zurück {FFFF00}%s. {AAAAAA}\nBitte geben sie Ihr{37FF00} Passwort{AAAAAA} ein.",SpielerName(playerid));
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Login",string,"Login","Abbrechen");
    }
    return 1;
    }


    stock LadeAccount(playerid)
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    new Spielerdatei[264];
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
    pInfo[playerid][plevel] = dini_Int(Spielerdatei,"Level");
    SetPlayerScore(playerid,pInfo[playerid][plevel] );
    pInfo[playerid][pgeld] = dini_Int(Spielerdatei,"Geld");
    GivePlayerMoney(playerid,pInfo[playerid][pgeld]);
    pInfo[playerid][padmin] = dini_Int(Spielerdatei,"Adminlevel");
    pInfo[playerid][premium] = dini_Int(Spielerdatei,"Premium");
    pInfo[playerid][pbanned] = dini_Int(Spielerdatei,"Banned");
    pInfo[playerid][pwarn] = dini_Int(Spielerdatei,"Warns");
    pInfo[playerid][pskin] = dini_Int(Spielerdatei,"Skin");
    pInfo[playerid][pleader] = dini_Int(Spielerdatei,"Leader");
    pInfo[playerid][pmember] = dini_Int(Spielerdatei,"Member");
    pInfo[playerid][prang] = dini_Int(Spielerdatei,"Rang");
    pInfo[playerid][pmute] = dini_Int(Spielerdatei,"Mute");
    fsInfo[playerid][Fuehrerschein] = dini_Int(Spielerdatei,"Führerschein");
    fsInfo[playerid][Mottoradschein] = dini_Int(Spielerdatei,"Mottoradschein");
    fsInfo[playerid][Bootschein] = dini_Int(Spielerdatei,"Bootschein");
    fsInfo[playerid][Angelschein] = dini_Int(Spielerdatei,"Angelschein");
    fsInfo[playerid][Flugschein] = dini_Int(Spielerdatei,"Flugschein");
    fsInfo[playerid][Waffenschein] = dini_Int(Spielerdatei,"Waffenschein");
    if(pInfo[playerid][pbanned] == 1)
    {
    SendClientMessage(playerid,COLOR_GRAU,"Du bist vom Server gebannt.");
    Kick(playerid);
    }
    pInfo[playerid][plogged] = 1;
    return 1;
    }


    stock SpielerSpeichern(playerid)
    {
    if(pInfo[playerid][plogged] == 1)
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    new Spielerdatei[264];
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
    dini_IntSet(Spielerdatei,"Level",pInfo[playerid][plevel]);
    dini_IntSet(Spielerdatei,"Geld",pInfo[playerid][pgeld]);
    dini_IntSet(Spielerdatei,"Adminlevel",pInfo[playerid][padmin]);
    dini_IntSet(Spielerdatei,"Premium",pInfo[playerid][premium]);
    dini_IntSet(Spielerdatei,"Banned",pInfo[playerid][pbanned]);
    dini_IntSet(Spielerdatei,"Warns",pInfo[playerid][pwarn]);
    dini_IntSet(Spielerdatei,"Skin",pInfo[playerid][pskin]);
    dini_IntSet(Spielerdatei,"Leader",pInfo[playerid][pleader]);
    dini_IntSet(Spielerdatei,"Member",pInfo[playerid][pmember]);
    dini_IntSet(Spielerdatei,"Rang",pInfo[playerid][prang]);
    dini_IntSet(Spielerdatei,"Mute",pInfo[playerid][pmute]);
    dini_IntSet(Spielerdatei,"Führerschein",fsInfo[playerid][Fuehrerschein]);
    dini_IntSet(Spielerdatei,"Mottoradschein",fsInfo[playerid][Mottoradschein]);
    dini_IntSet(Spielerdatei,"Bootschein",fsInfo[playerid][Bootschein]);
    dini_IntSet(Spielerdatei,"Angelschein",fsInfo[playerid][Angelschein]);
    dini_IntSet(Spielerdatei,"Flugschein",fsInfo[playerid][Flugschein]);
    dini_IntSet(Spielerdatei,"Waffenschein",fsInfo[playerid][Waffenschein]);
    }
    return 1;
    }


    Ich sehe kein Fehler nur was ich gerade endeckt habe ist da so ein komisches y in der Spielerdatei...
    ypasswort steht da jetzt.

  • Lösche die Spielerdatei, dann mach bei den Login und Register stocks zwischen die eckigen Klammern bei key mal 64 rein. Es kann sein, dass dini nicht mit den leeren Klammern klar kommt und dann registriere dich nochmal, und schau ob das y wieder da steht. Achte auch darauf, dass die Groß-Kleinschreibung von" "Passwort" stimmt. Auf Linux kann das durchaus zu Problemen führen, bei Windows möglicherweise auch, bzw. in dini selbst bereits.

  • Geht immer noch nicht X(


    Da kommt das
    Zeile (1683) : error 047: array sizes do not match, or destination array is too small
    Zeile (1708) : error 047: array sizes do not match, or destination array is too small


    2 Errors, 0 Warnungen
    Du hast Errors im Skript. Kompilierung abgebrochen


    PWNMod Compiler Version 1.2
    (c) Trooper[Y]
    In Kooperation mit GTA-Servers.de


    bei


    Register(playerid,MD5_Hash(inputtext));


    und


    Login(playerid,MD5_Hash(inputtext));

    4 Mal editiert, zuletzt von Pascal1998 ()

  • new tmp[64];
    format(tmp, 64, MD5_Hash(inputtext));
    Register(playerid, tmp);


    Das gleiche bei Login. Falls MD5 was längeres als 64 Characters zurück gibt musst du eben die 64 ändern, z.B. zu 128, auch bei den stocks.


    Also kriege keine Errors im script, jedoch wenn ich mich registriere und dann falsches passwort eingebe sagt er falsches passwort.
    So wenn ich dann relogge und wieder was falsches eingebe, geht das falsche passwort wieder.

  • Jetzt wird's kompliziert. Solche Probleme sind die elendigsten die man nur haben kann, kenn ich.


    Also:
    Lösche nochmal dein Konto, danach gehst du Schritt für Schritt vor, nach JEDEM Schritt schaust du in die Spielerdatei und schaust die Passwortzeile an.
    Das postest dann alles hier so:


    Registrierung: Passwort=wasweißich
    Spielerspeichern: Passwort=...
    Spiel verlassen: Passwort=...
    Login Versuch: Passwort=...
    usw.


  • Nein habe den Fehler gefunden aber ich weiß nicht wo es im script liegt..
    Sobald ich manuell etwas verändere in der Spielerdatei zb Das Level oder Adminlevel höhrerer mache bzw verändere,
    kann man sich mit falsche passwörter einloggen..
    Habe dies nun ca 5x gtestet.


    //EDIT: Brauche dabei hilfe den Fehler zu finden weil ich kann mir das nicht erklären.


    //2EDIT:: Habe es nun geschafft, es lag an den Standart editor.. durch das Therad geht es wiederhttp://forum.sa-mp.de/gta-multiplayer-mods/san-andreas-multiplayer/scripting-base/66957-%C3%BF-vor-den-passwort/


    Danke dir trz Jeffry für deine große mühe

    2 Mal editiert, zuletzt von Pascal1998 ()

  • Ahhh, das selbe Problem (ähnlich) hatte ich demletzt im Geschäft auch. Das liegt am Zeichensatz mit dem das Text-Format gespeichert wurde. Dann ist alles klar, da wäre ich jetzt hier nicht drauf gekommen, gut zu wissen, dass dini da Probleme verursachen kann.
    Super! :)