Los Angeles [v4.6] - Alle passwörter funktionieren bei adminlevel

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 liebe User.


    Ich habe ein Problem und ich weiß nicht ob ihr das auch habt.


    Wenn ein Spieler connected mit dem Namen eines admins, funktionieren alle passwörter.
    Also ich kann z.B "bla" eingeben und dann spawne ich.


    Ich weiß nicht, wie ich den bug beheben kann


    Vielen Dank im Voraus.


    //EDIT: Thementitel

  • Ist bei mir auch so, beim Admin speichert sich automatisch das password, von daher musste nix eingeben wenn du dich einloggst, weis aber nicht wie man es behebt.

  • hier ist die
    public OnPlayerLogin(playerid,password[])


    public OnPlayerLogin(playerid,password[])
    {
    new tmp2[128];
    new string2[128];
    new playername2[MAX_PLAYER_NAME];
    GetPlayerName(playerid, playername2, sizeof(playername2));
    format(string2, sizeof(string2), "/Accounts/%s.ini", playername2);
    new File: UserFile = fopen(string2, io_read);
    if ( UserFile )
    {
    new PassData[256];
    new keytmp[256], valtmp[256];
    fread( UserFile , PassData , sizeof( PassData ) );
    keytmp = ini_GetKey( PassData );
    if( strcmp( keytmp , "Key" , true ) == 0 )
    {
    valtmp = ini_GetValue( PassData );
    strmid(PlayerInfo[playerid][pKey], valtmp, 0, strlen(valtmp)-1, 255);
    }
    if(strcmp(PlayerInfo[playerid][pKey],password, true ) == 0 )
    {
    new key[ 256 ] , val[ 256 ];
    new Data[ 256 ];
    while ( fread( UserFile , Data , sizeof( Data ) ) )
    {
    key = ini_GetKey( Data );

  • public OnPlayerRegister(playerid, password[])
    {
    if(IsPlayerConnected(playerid))
    {
    new string3[100];
    new playername3[MAX_PLAYER_NAME];
    GetPlayerName(playerid, playername3, sizeof(playername3));
    format(string3, sizeof(string3), "/Accounts/%s.ini", playername3);
    new File: hFile = fopen(string3, io_write);
    if (hFile)
    {
    strmid(PlayerInfo[playerid][pKey], password, 0, strlen(password), 255);
    new var[32];
    format(var, 32, "Key=%s\n", PlayerInfo[playerid][pKey]);fwrite(hFile, var);

  • Hmm..
    Jetzt nochmal den Dialog vom registrieren.
    Der heißt glaube ich DIALOG_REGISTER oder sowas


    Unter Ondialogresponse
    da wird der Fehler sein

  • if(dialogid == DIALOG_REG)
    {
    if(response)
    {
    ShowPlayerDialog(playerid,DIALOG_REG2,DIALOG_STYLE_INPUT,"Account erstellen","Gib das Passwort für deinen Account ein:","OK","Abbrechen");
    }
    else
    {
    ShowPlayerDialog(playerid,DIALOG_REG,DIALOG_STYLE_MSGBOX,"Account","Du benötigst einen Account, um auf diesem Server zu spielen!","Erstellen","Abbrechen");
    }
    }
    if(dialogid == DIALOG_REG2)
    {
    if(response && strlen(inputtext) > 0)
    {
    OnPlayerRegister(playerid,inputtext);
    }
    else
    {
    ShowPlayerDialog(playerid,DIALOG_REG2,DIALOG_STYLE_INPUT,"Account erstellen","Gib das Passwort für deinen Account ein:","OK","Abbrechen");
    }
    }

  • if(dialogid == DIALOG_REG)
    {
    if(response)
    {
    if(strlen(inputtext))
    {
    new string31[128];
    GetPlayerName(playerid, sendername, sizeof(sendername));
    format(string31, sizeof(string31), "/Accounts/%s.ini", sendername);
    new File: hFile = fopen(string31, io_read);
    if (hFile)
    {
    SendClientMessage(playerid, COLOR_YELLOW, "Der Benutzername ist Bereits vergeben!");
    SendClientMessage(playerid, COLOR_YELLOW, "Bitte wähle einen Anderen!");
    fclose(hFile);
    return 1;
    }
    new tmppass[64];
    strmid(tmppass, inputtext, 0, strlen(inputtext), 64);
    Encrypt(tmppass);
    OnPlayerRegister(playerid, tmppass);
    }
    else
    {
    new regname[64];
    GetPlayerName(playerid,regname,sizeof(regname));
    ShowPlayerDialog(playerid,DIALOG_REG2,DIALOG_STYLE_INPUT,"Account erstellen","Gib das Passwort für deinen Account ein:","OK","Abbrechen");
    }
    }
    else
    {
    Kick(playerid);
    }
    return 1;
    }


    So müsste es gehen ;) Musst dich halt neu registrieren

  • Dann zeig mal dein OnplayerLogin
    und dein DIALOG_LOGIN .
    Dann liegts daran

  • Geht leider immer noch nicht. :(

    if(dialogid == DIALOG_LOGIN)
    {
    if(response && strlen(inputtext) > 0)
    {
    OnPlayerLogin(playerid,inputtext);
    }
    else
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"German Special RealLife [SRL] v2","Das Passwort ist nicht korrekt! \n Bitte gib nun dein richtiges Passwort ein:","Login","Abbrechen");
    }
    }


    Nichname:
    Beim Registrieren

    Code
    Key=meinpw
    Hunger=5
    Level=3
    Harndrang=5
    AdminLevel=2010
    DonateRank=0
    ConnectedTime=0
    ...



    Bei reconnect

    Code
    Key=
    Hunger=5
    Level=3
    Harndrang=5
    AdminLevel=2010
    DonateRank=0
    ConnectedTime=0
    ...


    also da ist nix mehr bei key

  • Also bei mir hat es damals so geklappt :S
    Ich such nochmal eben meinen alten Script und schau mir das da an.


    Ich editiere dann

  • Das ist ein simpler Fehler, den ich auch damals selber produziert habe.
    Normalerweise ist der Fehler folgender:


    Beim Speichern der Spielerdatei wird das Passwort aktualisiert (zB mit "pInfo[playerid][pPas]"),
    doch da "pInfo[playerid][pPas]" leer ist (wird meist beim Laden des Spielers nichtmehr gefüllt (zB kein dini_Get)), speichert er auch wieder leer.


    Behebung:
    Passwort bei Passworteingabe (Registration) 1 MAL(!) speichern, und dannach nichtmehr anfassen.
    Das heisst, nicht aktualisieren lassen oder ähnliches.
    Lediglich beim Login das Passwort einmal Abfragen!


    Aber im Verlauf des Scriptes (nach Registration) nichtmehr (zB) dini_Set(datei, "Passwort", passvar); nutzen!
    Hoffe ich konnte helfen ;)
    MfG
    Maxx

  • Dann ist die Passwort Abfrage falsch..
    Bei mir im Script (Selfmade) hatte ich es mal so:
    strmid(pInfo[playerid][pPass], dini_Get(pDatei(playerid), "Passwort"), 0, 25, 25);
    if(strcmp(pInfo[playerid][pPass], inputtext, false) == 0)
    Hat ansich immer funktioniert ;)
    Versuchs mal so auf deins umzubauen.
    MfG
    Maxx