Passwort ändern -> Befehl

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
  • Ich komme irgendwie nciht klar...


    Ich arbeite mit SII. Das funktioniert auch wunderbar aber mir geht es auf den keks wenn ich jeden Tag 20 Passwörter ändern muss. Ich möchte darum ein Befehl einfürgen:


    ocmd:cpasswort(playerid,params[])
    {
    new oldpassword,newpassword;
    if(sscanf(params,"ss",oldpassword,newpassword))return SCM(playerid,GELB,"INFO: /cpasswort [Altes Passwort] [Neues Passwort]");
    if(pInfo[playerid][Passwort] == oldpassword)
    {
    pInfo[playerid][Passwort]=newpassword;
    SCM(playerid,GREEN,"Passwort geändert!");
    }
    else
    {
    SCM(playerid,ROT,"Altes Passwort stimmt nicht!");
    }
    return 1;
    }


    Und wie ihr schon sehen könnt soll der Befehl vorher nachsehen ob das alte Kennwort übereinstimmt (so gibt es wenigstens minimale Sicherheit xD)
    Wenn ich nun den befehl im Spiel eingebe dann kommt beim falschen "oldpassword" der gewünschte Fehler "Altes Passwort stimmt nicht!" aber wenn ich das richtige eingebe dann kommt "Unknow Command"


    Wo habe ich hier den Fehler?
    Es kommen keine Errors oder Warnings...


    //edit: Befhel hätte nur für Admins funktioniert -> angepasst

    2 Mal editiert, zuletzt von Takiry ()

  • Nimm mir es nicht übel aber das check ich nun garnicht mehr...


    error 033: array must be indexed (variable "oldpassword")
    error 047: array sizes do not match, or destination array is too small



    was muss ich da nun ändern...



    bzw. was hat sich überhaubt geändert? außer das du aus dem else ein return gemacht hast? und das negiert hast?

  • Hier probier es mal folgernermaßen :thumbup:
    ocmd:cpasswort(playerid,params[])
    {
    new oldpassword,newpassword;
    if(sscanf(params,"ss",oldpassword,newpassword))return SCM(playerid,GELB,"INFO: /cpasswort [Altes Passwort] [Neues Passwort]");
    if(!strcmp(pInfo[playerid][Passwort],oldpassword,true))
    {
    if(INI_Open('deine Pfad'))
    {
    INI_WriteString("Passwort",newpassword);
    SCM(playerid,GREEN,"Passwort geändert!");
    INI_Save();
    INI_Close();
    }
    }
    else
    {
    SCM(playerid,ROT,"Altes Passwort stimmt nicht!");
    }
    return 1;
    }


    1. Strings vergleicht man nicht mit ' == ' sondern mit strcmp(strings compare)
    2. Ich bin mir fast 100% sicher, dass du beim ausloggen des Spielers das Passwort nicht erneut speicherst d.h. du musst es gleich neu in die INI schreiben damit es das Passwort behält

  • Ersteinmal Danke für die Antwort. Das Strings nicht so verlgichen werden können wusste ich nicht. Speichern lasse ich die ini beim onplayerdisconnect :D


    Ich bekomme aber folgende Errors in den zeilen:
    if(!strcmp(pInfo[playerid][Passwort],oldpassword,true))
    error 035: argument type mismatch (argument 2)


    INI_WriteString("Passwort",newpassword);
    error 035: argument type mismatch (argument 2)


    Da komme ich nun wirklich nicht weiter was ist daran falsch?

  • Du hast deine Strings old und newpassword nicht als String deklariert :D
    also
    new oldpassword[32], newpassword[32];


    und änder mal noch das "true" bei beim vergleichen zu false, denn
    true bedeutet, dass die Groß/Kleinschreibung nicht beachtet wird
    false bedeutet, dass sie beachtet wird

  • grrrr...


    Das passiert bei COPY & PASTE :D


    10.000 Mal Danke so funktioniert es... Und gelert habe ich auch was xD


    _______________


    Das ist das geile am dem Forum hier auch wenn man sich noch so dumm anstellt bekommt man Hilfe. Danke nochmal an euch. :thumbup: