Loginsystem buggt rum

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
  • Tag.


    Mein Loginsystem ist irgendwie total am buggen.


    Also , ich möchte , bevor man spawnt , dass man einen 5(!) stelligen Sicherheitscode eingeben muss. NUR wenn dieser richtig ist, kommt man weiter zur Passwort Eingabe. Nur es will nicht so ganz. Der Code ist nie 5 stellig , und man wird weitergeleitet egal ob er richtig oder falsch ist.


    Spoiler anzeigen

    if(dialogid==Dialog_Login1){
    if(response==1){
    if(!strlen(inputtext)){
    new string[256],string2[64],Nummer2[6],rand=random(9),rand2=random(9),rand3=random(9),rand4=random(9),rand5=random(9);
    format(Nummer2,sizeof(Nummer2),"%i%i%i%i%i",rand,rand2,rand3,rand4,rand5);
    fSicherheitscode[playerid]++;
    Nummer[playerid]=strval(Nummer2);
    format(string2,sizeof(string2),"Ungültige Sicherheitsnummer! [%i/3]",fSicherheitscode[playerid]);
    format(string,sizeof(string),"Da du bereits einen Account hast, musst du dich einloggen.\nSicherheitsnummer: {E0981B}%i",Nummer[playerid]);
    SendClientMessage(playerid,Rot,string2);
    return ShowPlayerDialog(playerid,Dialog_Login1,DIALOG_STYLE_INPUT,"Willkommen auf {E01B1B}My own World",string,"Weiter","Abbrechen");
    }
    if(strcmp(Nummer,inputtext,false)==0){

    }
    }
    else{
    SendClientMessage(playerid,Rot,"Du hast den Loginvorgang abgebrochen.");
    dini_Remove(Spieler);
    Kick(playerid);
    }
    }
    if(dialogid==Dialog_Login2){
    if(response==1){
    if(!strlen(inputtext) || strcmp(inputtext,dini_Get(Spieler,"Passwort"))!=0){
    new string[64];
    fPasswort[playerid]++;
    ShowPlayerDialog(playerid,Dialog_Login2,DIALOG_STYLE_PASSWORD,"Loginvorgang","Die Sicherheitsnummer war richtig.\nBitte gib nun dein Passwort ein:","Weiter","Abbrechen");
    format(string,sizeof(string),"Ungültiges Passwort! [%i/3]",fPasswort[playerid]);
    if(fPasswort[playerid]>=3){
    SendClientMessage(playerid,Rot,"Du wurdest vom System verbannt, Grund: 3x falsches Passwort");
    dini_IntSet(Spieler,"Banned",1);
    dini_Set(Spieler,"Banngrund","Ungueltiges Passwort");
    dini_Set(Spieler,"Banned-by","System");
    Kick(playerid);
    }
    return SendClientMessage(playerid,Rot,string);
    }
    if(strcmp(dini_Get(Spieler,"Passwort"),inputtext,true)==0){
    SpielerLaden(playerid);
    }
    }
    else{
    SendClientMessage(playerid,Rot,"Du hast den Registriervorgang abgebrochen.");
    dini_Remove(Spieler);
    Kick(playerid);
    }
    }


    Edit:


    Noch ein Problem, die Nachrichten werden immer 2x gesendet, LimitGlobalChatRadius auf 0 &' -1 hilft nicht :'D

    Spoiler anzeigen

    new Float:x,Float:y,Float:z;
    GetPlayerPos(playerid,x,y,z);
    for(new i=0;i<MAX_PLAYERS;i++){
    if(IsPlayerInRangeOfPoint(i,50.0,x,y,z)){
    new string[256];
    format(string,sizeof(string),"%s: %s",PlayerName(playerid),text);
    SendClientMessage(i,Weiss,string);
    SetPlayerChatBubble(playerid,string,Weiss,50.0,8000);
    ChatLog(playerid, string);
    }
    }

  • @BlackAce-Junior:
    Scheinbar weißt du nicht, wofür strcmp gut ist bzw. es zurück gibt. Bei deiner Variante wird es sicherlich nicht den gewünschten Zweck erfüllen.


    @xSpeciaaL:

    • Zufallszahl:
      Ich würde das generell anders machen - Nummer[playerid] = random(89999) + 10000; So wird es immer eine 5 stellige Zahl sein und du ersparst dir damit 2 Zeilen (und Variabeln).



    • Überprüfung:
      Bei der Überprüfung (bei dem Code unten Zeile 13) sollte er dir eigentlich eine Fehlermeldung ausgeben, weil dir der Array fehlt. Der Index wäre indem fall playerid.

  • Doch ist mir bewusst und glaub mir es klappt sogar ;)
    Benutze es genau so



    if(strcmp(Nummer,inputtext,true))


    numme = DieVariable
    inputtext = Womit sie verglichen soll
    true = ob die werte übereinstimmen.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen