Login-System Fehler

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
  • Liebe Breadfish Gemeinde,
    ich bin noch ziemlich frisch in der Materie,
    und möchte mein Login-System so erweitern,
    dass man 2 Versuche hat sein Passwort einzugeben,
    und danach gekickt wird, allerdings funktioniert mein Code nicht.

    Was habe ich vergessen?


    public OnDialogResponse(playerid,dialogid,response,listitem,inputtext[])
    {
    if(dialogid == DIALOG_LOGIN)
    {
    if(response == 1)
    {
    new Spieler[128];
    format(Spieler,sizeof(Spieler),"/Spieler/%s.txt",getPlayerName(playerid));
    if(strlen(inputtext) > 0)
    {
    if(strcmp(inputtext,dini_Get(Spieler,"Passwort"),false) == 0)
    {
    SendClientMessage(playerid,COLOR_GREEN,"Du hast dich erfolgreich eingeloggt!");
    loadPlayer(playerid);
    return 1;
    }
    else
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN_PASSWORT_FALSCH_NOCHMAL,DIALOG_STYLE_INPUT,"Login (Letzter Versuch)","Das Passwort ist falsch!\nProbier es nochmal:","Absenden","Abbrechen");
    {
    if(response == 1)
    {
    if(strlen(inputtext) > 0)
    {
    if(strcmp(inputtext,dini_Get(Spieler,"Passwort"),false) == 0)
    {
    SendClientMessage(playerid,COLOR_GREEN,"Du hast dich erfolgreich eingeloggt!");
    loadPlayer(playerid);
    return 1;
    }
    else
    {
    Kick(playerid);
    return 1;
    }
    }
    }
    if(response == 0)
    {
    Kick(playerid);
    return 1;
    }
    }
    }
    }
    }
    if(response == 0)
    {
    Kick(playerid);
    return 1;
    }
    return 1;
    }


    Danke für die Hilfe
    c4k3

  • so sollte es gehen..


    new versuch[MAX_PLAYERS];


    public OnDialogResponse(playerid,dialogid,response,listitem,inputtext[])
    {
    if(dialogid == DIALOG_LOGIN)
    {
    if(response == 1)
    {
    new Spieler[128];
    format(Spieler,sizeof(Spieler),"/Spieler/%s.txt",getPlayerName(playerid));
    if(strlen(inputtext) > 0)
    {
    if(strcmp(inputtext,dini_Get(Spieler,"Passwort"),false) == 0)
    {
    SendClientMessage(playerid,COLOR_GREEN,"Du hast dich erfolgreich eingeloggt!");
    loadPlayer(playerid);
    return 1;
    }
    else
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN_PASSWORT_FALSCH_NOCHMAL,DIALOG_STYLE_INPUT,"Login (Letzter Versuch)","Das Passwort ist falsch!\nProbier es nochmal:","Absenden","Abbrechen");
    {
    if(response == 1)
    {
    if(strlen(inputtext) > 0)
    {
    if(strcmp(inputtext,dini_Get(Spieler,"Passwort"),false) == 0)
    {
    SendClientMessage(playerid,COLOR_GREEN,"Du hast dich erfolgreich eingeloggt!");
    loadPlayer(playerid);
    return 1;
    }
    else
    {
    versuch[playerid] ++;
    if(versuch[playerid] >= 2)return Kick(playerid);
    return ShowPlayerDialog(playerid,DIALOG_LOGIN_PASSWORT_FALSCH_NOCHMAL,DIALOG_STYLE_INPUT,"Login (Letzter Versuch)","Das Passwort ist falsch!\nProbier es nochmal:","Absenden","Abbrechen");
    }
    }
    }
    if(response == 0)
    {
    Kick(playerid);
    return 1;
    }
    }
    }
    }
    }
    if(response == 0)
    {
    Kick(playerid);
    return 1;
    }
    return 1;
    }

  • new Versuch[MAX_PLAYERS];


    public OnDialogResponse(playerid,dialogid,response,listitem,inputtext[]){
    if(dialogid == DIALOG_LOGIN){
    if(!response)return Kick(playerid);
    new Spieler[40];
    format(Spieler,sizeof Spieler,"/Spieler/%s.txt",getPlayerName(playerid));
    if(strlen(inputtext) > 0){
    if(!strcmp(inputtext,dini_Get(Spieler,"Passwort"),false)==0){
    Versuch[playerid]++;
    if(Versuch[playerid] == 3)return Kick(playerid);
    else if(Versuch[playerid] == 2)return ShowPlayerDialog(playerid,DIALOG_LOGIN_PASSWORT_FALSCH_NOCHMAL,DIALOG_STYLE_INPUT,"Login (Letzter Versuch)","Das Passwort ist falsch!\nProbier es nochmal:","Absenden","Abbrechen");
    return 1;
    }
    else{
    SendClientMessage(playerid,COLOR_GREEN,"Du hast dich erfolgreich eingeloggt!");
    loadPlayer(playerid);
    return 1;
    }
    }
    return 1;
    }
    return 1;
    }
    c4k3:
    Ich habe es dir etwas kürzer geschrieben. Beim 2. Versuch => Letzter Versuch - 3. Versuch => Kick
    Sollte klappen, wenn nicht - bitte melden!
    Musst vielleicht noch etwas richtig einrücken.

  • Ich kann dir jetzt hier keinen genau vorgescripteten code geben, aber eine idee, wie man es machen könnte. Also ich habe den Login vorgang so in meinem script:


    if(dialogid == DIALOG_LOGIN)
    {
    if(response == 0)
    {
    SendClientMessage(playerid, ROT, "Du hast den Login vorgang abgebrochen");
    Kick(playerid);
    return 1;
    }


    if(response == 1)
    {
    if(!strlen(inputtext))
    {
    SendClientMessage(playerid, ROT,"Du musst dein Passwort eingeben!");
    ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login","Herzlich Willkommen zurück!\nGebe dein Passwort ein, um dich einzuloggen.","Login","Abbrechen");
    }
    else
    {
    Login(playerid, inputtext);
    }
    return 1;
    }
    return 1;
    }


    So nun wirst du also in den stock Login geleitet. Der sieht bei mir so aus:


    stock Login (playerid, key[])
    {
    new Spielerdatei [64];
    new Name [MAX_PLAYER_NAME];
    GetPlayerName(playerid, Name, sizeof(Name));
    format (Spielerdatei, sizeof(Spielerdatei),"/Accounts/%s.txt",Name);
    if(!strcmp(key, dini_Get(Spielerdatei,"Passwort"),true))
    {
    SendClientMessage(playerid, GRÜN, "Du hast dich erfolgreich eingeloggt");
    SpielerLaden(playerid);
    SpawnPlayer(playerid);
    new Willkommennachricht[64];
    format(Willkommennachricht, sizeof Willkommennachricht,"Willkommen zurueck ~n~~w~%s!",getPlayerName(playerid));
    GameTextForPlayer(playerid,Willkommennachricht,5000, 1);
    return 1;
    }
    else
    {
    SendClientMessage(playerid,ROT,"Du hast dein Passwort flasch eingegeben!");
    Kick(playerid);
    return 1;
    }
    }


    Du kannst ja einfach bei "else" statt SendClientMessage(playerid,ROT,"Du hast dein Passwort flasch eingegeben!");
    Kick(playerid);
    return 1;


    Den Spieler in einen neuen stock Leiten, der genau das oben, abspielt, nur das du ihn bei falsch eingabe kickst. Sprich du machst es so:


    stock Login (playerid, key[])
    {
    new Spielerdatei [64];
    new Name [MAX_PLAYER_NAME];
    GetPlayerName(playerid, Name, sizeof(Name));
    format (Spielerdatei, sizeof(Spielerdatei),"/Accounts/%s.txt",Name);
    if(!strcmp(key, dini_Get(Spielerdatei,"Passwort"),true))
    {
    SendClientMessage(playerid, GRÜN, "Du hast dich erfolgreich eingeloggt");
    SpielerLaden(playerid);
    SpawnPlayer(playerid);
    new Willkommennachricht[64];
    format(Willkommennachricht, sizeof Willkommennachricht,"Willkommen zurueck ~n~~w~%s!",getPlayerName(playerid));
    GameTextForPlayer(playerid,Willkommennachricht,5000, 1);
    return 1;
    }
    else
    {
    Login2(playerid, Inputtext);
    }
    }


    du musst nun einfach den stock erstellen. Dazu nimmst du diesen stock:


    stock Login2 (playerid, key[])
    {
    new Spielerdatei [64];
    new Name [MAX_PLAYER_NAME];
    GetPlayerName(playerid, Name, sizeof(Name));
    format (Spielerdatei, sizeof(Spielerdatei),"/Accounts/%s.txt",Name);
    if(!strcmp(key, dini_Get(Spielerdatei,"Passwort"),true))
    {
    SendClientMessage(playerid, GRÜN, "Du hast dich erfolgreich eingeloggt");
    SpielerLaden(playerid);
    SpawnPlayer(playerid);
    new Willkommennachricht[64];
    format(Willkommennachricht, sizeof Willkommennachricht,"Willkommen zurueck ~n~~w~%s!",getPlayerName(playerid));
    GameTextForPlayer(playerid,Willkommennachricht,5000, 1);
    return 1;
    }
    else
    {
    SendClientMessage(playerid,ROT,"Du hast dein Passwort flasch eingegeben!");
    Kick(playerid);
    return 1;
    }
    }


    Ab da weiß ich nicht weiter wie man es lösen kann, aber vlt, einfach den Dialog von oben kopieren, und ihn mit "DIALOG_LOGIN2 ausstauschen, und es anpassen. Man müsste dem Spieler nur wieder den Dialog anzeigen. Das könnte man vlt. so machen, aber ich weiß nicht sicher ob es funktioniert:
    stock Login (playerid, key[])
    {
    new Spielerdatei [64];
    new Name [MAX_PLAYER_NAME];
    GetPlayerName(playerid, Name, sizeof(Name));
    format (Spielerdatei, sizeof(Spielerdatei),"/Accounts/%s.txt",Name);
    if(!strcmp(key, dini_Get(Spielerdatei,"Passwort"),true))
    {
    SendClientMessage(playerid, GRÜN, "Du hast dich erfolgreich eingeloggt");
    SpielerLaden(playerid);
    SpawnPlayer(playerid);
    new Willkommennachricht[64];
    format(Willkommennachricht, sizeof Willkommennachricht,"Willkommen zurueck ~n~~w~%s!",getPlayerName(playerid));
    GameTextForPlayer(playerid,Willkommennachricht,5000, 1);
    return 1;
    }
    else
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN2, DIALOG_STYLE_PASSWORT,"überschrift","willkommens nachricht und warnung","Weiter,"abbrechen");
    Login2(playerid, Inputtext);
    }
    }


    So dann kopierst du einfach die DIalog anwort von oben, unf fügst alles ein, das es in den neuen stock geleitet wird.
    if(dialogid == DIALOG_LOGIN2)
    {
    if(response == 0)
    {
    SendClientMessage(playerid, ROT, "Du hast den Login vorgang abgebrochen");
    Kick(playerid);
    return 1;
    }


    if(response == 1)
    {
    if(!strlen(inputtext))
    {
    SendClientMessage(playerid, ROT,"Du musst dein Passwort eingeben!");


    ShowPlayerDialog(playerid, DIALOG_LOGIN2, DIALOG_STYLE_PASSWORD, "Login","Herzlich Willkommen zurück!\nGebe dein Passwort ein, um dich einzuloggen.","Login","Abbrechen"); // den dialog so anpassen wie du möchtext!
    }
    else
    {
    Login2(playerid, inputtext);
    }
    return 1;
    }
    return 1;
    }


    Du musst jetzt oben im script nur noch den DIALOG_LOGIN2 definen:


    #define DIALOG_LOGIN2 2 // Die 2 anpassen.


    Ich denke so müsste es funktionieren und ich hoffe ich konnte dir helfen. Wenn grobe fehler drin sind, sind es flüchtigkeits fehler aus zeitgründen!


    Es ist vielleicht nicht richtig eingerückt, das müsstest man dann selber machen!


    MFG
    Kempfer

    Einmal editiert, zuletzt von Kempfer ()

  • Ich hab die Lösung für das Problem gefunden:
    So sollte es eig. aussehen:


    public OnPlayerConnect(playerid)
    {
    SetPVarInt(playerid, "Gemutet", 0);
    new Spieler[128];
    format(Spieler,sizeof(Spieler),"/Spieler/%s.txt",getPlayerName(playerid));
    if(dini_Exists(Spieler))
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Gib bitte dein Passwort ein:","Absenden","Abbrechen");
    return 1;
    }
    else
    {
    ShowPlayerDialog(playerid,DIALOG_REGISTRIERUNG,DIALOG_STYLE_PASSWORD,"Registrierung","Gib hier dein zukünftiges Passwort ein:","Absenden","Abbrechen");
    return 1;
    }
    }


    public OnDialogResponse(playerid,dialogid,response,listitem,inputtext[])
    {
    if(dialogid == DIALOG_LOGIN)
    {
    if(response == 1)
    {
    new Spieler[128];
    format(Spieler,sizeof(Spieler),"/Spieler/%s.txt",getPlayerName(playerid));
    if(strlen(inputtext) > 0)
    {
    if(strcmp(inputtext,dini_Get(Spieler,"Passwort"),false) == 0)
    {
    SendClientMessage(playerid,COLOR_GREEN,"Du hast dich erfolgreich eingeloggt!");
    loadPlayer(playerid);
    return 1;
    }
    else
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN_NOCHMAL,DIALOG_STYLE_PASSWORD,"Login (Letzter Versuch)","Das Passwort war falsch! Gib es bitte nochmal richtig ein:","Absenden","Abbrechen");
    return 1;
    }
    }
    ShowPlayerDialog(playerid,DIALOG_LOGIN_NOCHMAL_0,DIALOG_STYLE_PASSWORD,"Login (Letzter Versuch)","Du musst ein Passwort eingeben! Gib es bitte hier richtig ein:","Absenden","Abbrechen");
    return 1;
    }
    else if(response == 0)
    {
    Kick(playerid);
    return 1;
    }
    return 1;
    }
    if(dialogid == DIALOG_REGISTRIERUNG)
    {
    if(response == 1)
    {
    new Spieler[128];
    format(Spieler,sizeof(Spieler),"/Spieler/%s.txt",getPlayerName(playerid));
    dini_Create(Spieler);
    dini_Set(Spieler,"Passwort",inputtext);
    dini_IntSet(Spieler,"Geld",1000);
    dini_IntSet(Spieler,"Level",1);
    dini_IntSet(Spieler,"Rang",0);
    SendClientMessage(playerid,COLOR_GREEN,"Du hast dich erfolgreich registriert.");
    loadPlayer(playerid);
    return 1;
    }
    else if(response == 0)
    {
    Kick(playerid);
    return 1;
    }
    return 1;
    }
    if(dialogid == DIALOG_LOGIN_NOCHMAL)
    {
    if(response == 1)
    {
    new Spieler[128];
    format(Spieler,sizeof(Spieler),"/Spieler/%s.txt",getPlayerName(playerid));
    if(strlen(inputtext) > 0)
    {
    if(strcmp(inputtext,dini_Get(Spieler,"Passwort"),false) == 0)
    {
    SendClientMessage(playerid,COLOR_GREEN,"Du hast dich erfolgreich eingeloggt!");
    loadPlayer(playerid);
    return 1;
    }
    else
    {
    Kick(playerid);
    return 1;
    }
    }
    Kick(playerid);
    return 1;
    }
    else if(response == 0)
    {
    Kick(playerid);
    return 1;
    }
    }
    if(dialogid == DIALOG_LOGIN_NOCHMAL_0)
    {
    if(response == 1)
    {
    new Spieler[128];
    format(Spieler,sizeof(Spieler),"/Spieler/%s.txt",getPlayerName(playerid));
    if(strlen(inputtext) > 0)
    {
    if(strcmp(inputtext,dini_Get(Spieler,"Passwort"),false) == 0)
    {
    SendClientMessage(playerid,COLOR_GREEN,"Du hast dich erfolgreich eingeloggt!");
    loadPlayer(playerid);
    return 1;
    }
    else
    {
    Kick(playerid);
    return 1;
    }
    }
    Kick(playerid);
    return 1;
    }
    else if(response == 0)
    {
    Kick(playerid);
    return 1;
    }
    }
    return 1;
    }


    So geht es bei mir.


    Trotzdem Danke für die sehr schnelle Hilfe
    c4k3