Problem mit Login/Registration system

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,
    Ich habe ein Problem mit meinem Login/Registration system.
    Und zwar will es mir die "Daten" eines Spielers nicht abspeichern,
    wenn dieser disconnected.
    Errors werden mir keine angezeigt, ebenso
    wie Warnings. Ich denke es ist eine Kleinigkeit, die ich allerdings nicht sehe -.-'.


    Werft selbst ein Blick drauf:
    public OnPlayerConnect(playerid)
    {
    new name[MAX_PLAYERS],Account[128];
    GetPlayerName(playerid,name,sizeof(name));
    format(Account,sizeof(Account),"%s.txt",name);


    if(dini_Isset(Account,"Passwort"))
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login:","Bitte log dich nun mit deinem\nPasswort ein!","Login","Abbrechen");
    }
    else
    {
    ShowPlayerDialog(playerid,DIALOG_REG,1,"Registration:","Bitte registriere dich nun mit einem Passwort!","Registrieren","Abbrechen");
    }

    return 1;
    }


    public OnPlayerDisconnect(playerid, reason)
    {
    new name[MAX_PLAYERS], Account[128];
    GetPlayerName(playerid, name, sizeof(name));
    format(Account,sizeof(Account),"s.txt",name);

    //Player[playerid][wanted] = GetPlayerWantedLevel(playerid);
    //Player[playerid][skin] = GetPlayerSkin(playerid);

    if(dini_Exists(Account) && Player[playerid][eingeloggt] == 1)
    {
    dini_IntSet(Account,"wanted",GetPlayerWantedLevel(playerid));
    dini_IntSet(Account,"skin",GetPlayerSkin(playerid));
    }

    Player[playerid][wanted] = 0;
    Player[playerid][skin] = 0;
    Player[playerid][eingeloggt] = 0;

    return 1;
    }


    public OnPlayerSpawn(playerid)
    {
    new name[MAX_PLAYERS], Account[128];
    GetPlayerName(playerid,name,sizeof(name));
    format(Account,sizeof(Account),"%s.txt",name);

    if(dini_Isset(Account,"wanted") && dini_Isset(Account,"skin"))
    {
    SetPlayerWantedLevel(playerid,Player[playerid][wanted]);
    SetPlayerSkin(playerid,Player[playerid][skin]);
    }


    return 1;
    }


    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    new name[MAX_PLAYERS], Account[128];
    GetPlayerName(playerid,name,sizeof(name));
    format(Account,sizeof(Account),"%s.txt",name);


    if(dialogid == DIALOG_LOGIN)
    {
    if(response)
    {
    if(!strlen(inputtext))
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login:","Bitte log dich nun mit deinem\nPasswort ein!","Login","Abbrechen");
    SendClientMessage(playerid,COLOR_RED,"Das Passwort ist zu kurz!");
    }
    if(strcmp(inputtext,dini_Get(Account,"Passwort")) == 0)
    {
    Player[playerid][wanted] = dini_Int(Account,"wanted");
    Player[playerid][skin] = dini_Int(Account,"skin");
    Player[playerid][eingeloggt] = 1;
    SendClientMessage(playerid,COLOR_YELLOW,"Du hast dich erfolgreich eingeloggt!");
    }
    else
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login:","Bitte log dich nun mit deinem\nPasswort ein!","Login","Abbrechen");
    SendClientMessage(playerid,COLOR_RED,"Das eingegebene Passwort war falsch!");
    }
    }
    else
    {
    Kick(playerid);
    }
    }

    if(dialogid == DIALOG_REG)
    {
    if(response)
    {
    if(!strlen(inputtext))
    {
    ShowPlayerDialog(playerid,DIALOG_REG,1,"Registration:","Bitte registriere dich nun mit einem Passwort!","Registrieren","Abbrechen");
    SendClientMessage(playerid,COLOR_RED,"Das Passwort ist zu kurz!");
    }
    else
    {
    dini_Create(Account);
    dini_Set(Account,"Passwort",inputtext);
    dini_IntSet(Account,"wanted",0);
    dini_IntSet(Account,"skin",26);
    Player[playerid][eingeloggt] = 1;
    SendClientMessage(playerid,COLOR_YELLOW,"Du hast dich erfolgreich registriert und bist nun eingeloggt!");
    }
    }
    else
    {
    Kick(playerid);
    }
    }
    return 1;
    }


    Die Daten die ich beim Registrieren unten im Dialog mit dini_IntSet... speichere, werden auch gespeichert, die
    unter OnPlayerDisconnect allerdings nicht.


    Danke schonmal im voraus falls ihr helfen könnt.

  • erstell den stock SpielerSpeichern und füg bei OnPlayerDisconnect SpielerSpeichern(playerid); hinzu.


    z.B.:


    stock SpielerSpeichern(playerid)
    {
    if(GetPVarInt(playerid,"loggedin")==1)
    {
    new Playerdata[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Playerdata,sizeof(Playerdata),"/Accounts/%s.txt",name);
    dini_IntSet(Playerdata,"Level",GetPlayerScore(playerid));
    dini_IntSet(Playerdata,"Geld",GetPlayerMoney(playerid));
    }
    return 1;
    }


    Nach diesem Schema den Stock

    Du brauchst Hilfe beim scripten? Siehe Hier:


    Klick mich!


    Derzeitiges Projekt: Youngs Deathmatch 1.0.0 [||||||||||]


  • public OnPlayerDisconnect(playerid, reason)
    {
    new name[MAX_PLAYERS], Account[128];
    GetPlayerName(playerid, name, sizeof(name));
    format(Account,sizeof(Account),"%s.txt",name);

    //Player[playerid][wanted] = GetPlayerWantedLevel(playerid);
    //Player[playerid][skin] = GetPlayerSkin(playerid);

    if(dini_Exists(Account) && Player[playerid][eingeloggt] == 1)
    {
    dini_IntSet(Account,"wanted",GetPlayerWantedLevel(playerid));
    dini_IntSet(Account,"skin",GetPlayerSkin(playerid));
    }

    Player[playerid][wanted] = 0;
    Player[playerid][skin] = 0;
    Player[playerid][eingeloggt] = 0;

    return 1;
    }

    So müsste es klappen :)

  • @UP


    Ja aber ich würde ihm empfehlen einen stock zu erstellen, weil es übersichtlicher und schneller ist. Andererseits hast du recht das es so 100% klappen muss weil der Beispielstock von mir angepasst werden müsste. ;)

    Du brauchst Hilfe beim scripten? Siehe Hier:


    Klick mich!


    Derzeitiges Projekt: Youngs Deathmatch 1.0.0 [||||||||||]

  • stocks finde ich nicht übersichtlicher, und außerdem glaube ich auch nicht,dass sie schneller sind beim disconnect werden sie gleich im callback selbst durchgeführt


    naya kenne mich mit den speeds der verschiedenen funktionen nicht so aus aber ich gehe davon aus ^^