Login/Register 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
  • Hey Leute.


    Könnte mir jemand beim Login/Register System helfen? Ich weiß nämlich nicht wie ich das machen soll. Es soll Geld, Skin und Kills speichern.


    Könnte mir einer per Skype/Teamviewer helfen? Oder erklären wir das geht?


    Danke im Vorraus


    Lg
    Daniel

  • Geld und Skin kannst du so speichern.


    dini_IntSet(DateiPfad,"Skin",GetPlayerSkin(playerid));
    dini_IntSet(DateiPfad,"Geld",GetPlayerMoney(playerid));


    Bei den Kills musst du die Kills auf eine Variable legen. Wenn du ein enum für die Spielerinfos hast dann mach es so bei OnPlayerDeath.


    public OnPlayerDeath(playerid, killerid, reason)
    {
    VariableFürInfo[killerid][Kills] ++;
    return 1;
    }
    Dann kannst du nämlich dort wo du es speichern lässt das so machen :


    dini_IntSet(DateiPfad,"Kills",VariableFürInfo[playerid][Kills]);


    Wenn du kein enum hast machst du es so:
    Global eine Varibale erstellen.
    new PlayerKills[MAX_PLAYERS];


    Und dann bei OnPlayerDeath:
    public OnPlayerDeath(playerid, killerid, reason)
    {
    PlayerKills[killerid]++;
    return 1;
    }


    Beim Speichern machst du das dann so:


    dini_IntSet(DateiPfad,"Kills",PlayerKills[playerid]);

  • Okey, ich habe jetzt alles nach dem Tutorial gemacht aber ich bekomme ein paar Errors. Paar habe ich selber gelöst, aber diese hier bekomme ich nicht hin:


    Errors:


    Spoiler anzeigen
    C:\Users\ziegler\Desktop\_\SA-MP Server\gamemodes\stunt.pwn(233) : warning 202: number of arguments does not match definition
    C:\Users\ziegler\Desktop\_\SA-MP Server\gamemodes\stunt.pwn(236) : error 029: invalid expression, assumed zero
    C:\Users\ziegler\Desktop\_\SA-MP Server\gamemodes\stunt.pwn(254) : warning 217: loose indentation
    C:\Users\ziegler\Desktop\_\SA-MP Server\gamemodes\stunt.pwn(262) : error 010: invalid function or declaration
    C:\Users\ziegler\Desktop\_\SA-MP Server\gamemodes\stunt.pwn(266) : error 010: invalid function or declaration
    C:\Users\ziegler\Desktop\_\SA-MP Server\gamemodes\stunt.pwn(274) : warning 219: local variable "name" shadows a variable at a preceding level
    C:\Users\ziegler\Desktop\_\SA-MP Server\gamemodes\stunt.pwn(292) : error 017: undefined symbol "Spierdatei"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase

    Spoiler anzeigen
    4 Errors.



    Script:



    Spoiler anzeigen
    #include <a_samp>
    #include <dini>
    #include <md5>

    Spoiler anzeigen
    //---------------------------DEFINE'S---------------------------------------
    #define REGISTER 1
    #define LOGIN 2

    Spoiler anzeigen
    #define COLOR_GREEN 0x0FC3009C
    #define COLOR_WHITE 0xD2D2D2FF
    #define COLOR_RED 0xFF2800B4

    Spoiler anzeigen
    //--------------------------NEW'S-------------------------------------------
    new player[128];
    new PlayerKills[MAX_PLAYERS];

    Spoiler anzeigen
    main()
    {
    print("\n----------------------------------");
    print(" Stunt-Script wurde erfolgreich gestartet!");
    print("----------------------------------\n");
    }

    Spoiler anzeigen
    public OnGameModeInit()
    {
    // Don't use these lines if it's a filterscript
    SetGameModeText("DM/STUNT/RACE/DERBY");
    AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
    return 1;
    }

    Spoiler anzeigen
    public OnGameModeExit()
    {
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerRequestClass(playerid, classid)
    {
    SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
    SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
    SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerConnect(playerid)
    {
    format(player, sizeof(player),"/Player/%s.ini",name(playerid));
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerDisconnect(playerid, reason)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerSpawn(playerid)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerDeath(playerid, killerid, reason)
    {
    PlayerKills[killerid]++;
    return 1;
    }

    Spoiler anzeigen
    public OnVehicleSpawn(vehicleid)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnVehicleDeath(vehicleid, killerid)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerText(playerid, text[])
    {
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if (strcmp("/help", cmdtext, true, 10) == 0)
    {
    SendClientMessage(playerid,COLOR_GREEN,"|______________HELP______________|");
    return 1;
    }
    return 0;
    }

    Spoiler anzeigen
    public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerExitVehicle(playerid, vehicleid)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerEnterCheckpoint(playerid)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerLeaveCheckpoint(playerid)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerEnterRaceCheckpoint(playerid)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerLeaveRaceCheckpoint(playerid)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnRconCommand(cmd[])
    {
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerRequestSpawn(playerid)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnObjectMoved(objectid)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerObjectMoved(playerid, objectid)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnVehicleMod(playerid, vehicleid, componentid)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnVehicleRespray(playerid, vehicleid, color1, color2)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerSelectedMenuRow(playerid, row)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerExitedMenu(playerid)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnRconLoginAttempt(ip[], password[], success)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerUpdate(playerid)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerStreamIn(playerid, forplayerid)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerStreamOut(playerid, forplayerid)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnVehicleStreamIn(vehicleid, forplayerid)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnVehicleStreamOut(vehicleid, forplayerid)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid == REGISTER)
    {
    if(response == 0)return Kick(playerid);
    if(response == 1)
    {
    new len = strlen(inputtext);
    if(len < 6)
    {
    SendClientMessage(playerid, COLOR_RED, "Du hast kein Passwort eingegeben!");
    ShowPlayerDialog(playerid, REGISTER,DIALOG_STYLE_INPUT,"Guten Tag %s,\nwie es aussieht, bist du neu hier. Bitte gebe ein Passwort ein!\n Aber vegesse es nicht und gebe es niemanden weiter!","Registrieren","Abbrechen");
    return 1;
    }
    REGISTER(playerid, MD5_Hash(inputtext));
    }
    }

    if(dialogid == LOGIN)
    {
    if(response ==0)return Kick(playerid);
    if(response == 8)
    {
    if(strlen(inputtext))
    {
    ShowPlayerDialog(playerid, LOGIN, DIALOG_STYLE_PASSWORD, "Login","Hi%s!\nDein Account wurde gefunden. Bitte logge dich mit\nmit deinem Passwort ein!","Login","Abbrechen");
    SendClientMessage(playerid,COLOR_RED, "Du hast kein Passwort eingegeben.");
    return 1;
    }
    Login(playerid, MD5_Hash(inputtext));
    }
    }
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerClickPlayer(playerid, clickedplayerid, source)
    {
    return 1;
    }

    Spoiler anzeigen
    if(dini_Exists(player))
    {
    ShowPlayerDialog(playerid, LOGIN, DIALOG_STYLE_PASSWORD, "Login","Hi%s!\nDein Account wurde gefunden. Bitte logge dich mit\nmit deinem Passwort ein!","Login","Abbrechen");
    }
    else
    {
    ShowPlayerDialog(playerid, REGISTER,DIALOG_STYLE_INPUT,"Registration","Guten Tag %s,\nwie es aussieht, bist du neu hier. Bitte gebe ein Passwort ein!\n Aber vegesse es nicht und gebe es niemanden weiter!","Registrieren","Abbrechen");
    }

    Spoiler anzeigen
    stock name(playerid)
    {
    new name[24];
    GetPlayerName(playerid, name, 24);
    return name;
    }

    Spoiler anzeigen
    stock Register(playerid, key[])
    {
    format(player, sizeof(player), "Player/%.ini",name(playerid));
    dini_Create(player);
    dini_Set(player,"Key",key);
    return 1;
    }

    Spoiler anzeigen
    stock Login(playerid, key[])
    {
    format(player, sizeof(player) , "/Player/%s.ini",name(playerid));
    if(strcmp(key,dini_Get(Spierdatei,"Key"),false))
    {
    SendClientMessage(playerid,COLOR_WHITE, "ERfolgreich eingeloggt.");
    Spielerladen(playerid);
    }
    else
    {
    ShowPlayerDialog(playerid, LOGIN, DIALOG_STYLE_PASSWORD, "Login","Hi%s!\nDein Account wurde gefunden. Bitte logge dich mit\nmit deinem Passwort ein!","Login","Abbrechen");
    SendClientMessage(playerid,COLOR_RED, "Falsches Passwort");
    }
    return 1;
    }

    Spoiler anzeigen
    stock Spielerladen(playerid)
    {
    format(player, sizeof(player), "/Player/%s.ini",name(playerid));
    GivePlayerMoney(playerid, dini_Int(player,"Money"));
    SetPlayerScore(playerid,dini_Int(player,"Score"));
    return 1;
    }

    Spoiler anzeigen
    stock Spielerspeichern(playerid)
    {
    format(player, sizeof(player), "/Player/%s.ini",name[playerid]);
    dini_IntSet("/Player/%s.ini", "Money",GetPlayerMoney[playerid]);
    dini_IntSet("/Player/%s.ini", "Score",GetPlayerScore[playerid]);
    dini_IntSet("/Player/%s.ini","Kills",PlayerKills[playerid]);
    return 1;
    }

    2 Mal editiert, zuletzt von DerCooper ()

  • 1. warning 202: number of arguments does not match definition
    Du hast folgendes:
    ShowPlayerDialog(playerid, REGISTER,DIALOG_STYLE_INPUT,"Guten Tag %s,\nwie es aussieht, bist du neu hier. Bitte gebe ein Passwort ein!\n Aber vegesse es nicht und gebe es niemanden weiter!","Registrieren","Abbrechen");
    1. Fehlt da die Dialog Überschrift. Warum erklärt sich indem du diese Seite hier anschaust. http://wiki.sa-mp.com/wiki/ShowPlayerDialog
    2. Willst du dort %s anwenden, also das der Spielername angezeigt wird. So geht das nicht, da man in einem Dialog das nicht einfach so anzeigen lassen kann.
    Wie du dennoch den Spielernamen da rein bekommst zeig ich dir.
    Zuerst legen wir einen neuen String an mit dessen Hilfe wir den Namen in den Dialog reinbekommen.
    new dialogstring[LÄNGE]; //Bei Länge einfach die ungefähre Zeichenanzahl.
    Danach formatieren wir den String.
    format(dialogstring,sizeof(dialogstring),"%s");
    Jetzt müssen wir noch den Spielernamen irgendwie in das %s bzw. das %s zum Spielernamen machen. Das machen wir indem wir mit GetPlayerName den Namen herausfinden. Dazu ergänzen wir jetzt folgendes:
    new dialogstring[LÄNGE],sName[MAX_PLAYER_NAME]; //Bei Länge einfach die ungefähre Zeichenanzahl.
    Dann können wir nämlich mit GetPlayerName den Namen herausfinden.
    GetPlayerName(playerid,sName,sizeof(sName));
    Nun können wir "sName" dazu benutzen, den Spielernamen auf das %s zu legen. Dazu machen wir jetzt folgendes.
    format(dialogstring,sizeof(dialogstring),"%s",sName);
    Wenn wir uns jetzt "dialogstring" ausgeben lassen würden, dann würde der Name erscheinen. Machen wir das doch gleich in dem Dialog, doch bevor wir das machen passe ich das an deinen Dialog an.
    format(dialogstring,sizeof(dialogstring),"Guten Tag %s,\nwie es aussieht, bist du neu hier. Bitte gebe ein Passwort ein!\n Aber vegesse es nicht und gebe es niemanden weiter!",sName);
    ShowPlayerDialog(playerid, REGISTER,DIALOG_STYLE_INPUT,"Register",dialogstring,"Registrieren","Abbrechen");


    2. error 029: invalid expression, assumed zero
    Das kommt da du REGISTER statt Register genommen hast. Dein Dialog heißt REGISTER, doch die Funktion zum Registrieren heißt Register. Das heißt dann dass du
    REGISTER(playerid, MD5_Hash(inputtext));
    zu
    Register(playerid, MD5_Hash(inputtext));
    machen musst.


    3. error 010: invalid function or declaration
    Also eine Abfrage gehört keinesfalls einfach so ins Script rein. Da hast du das wohl falsch gesetzt. Mache das hier:
    if(dini_Exists(player))
    {
    ShowPlayerDialog(playerid, LOGIN, DIALOG_STYLE_PASSWORD, "Login","Hi%s!\nDein Account wurde gefunden. Bitte logge dich mit\nmit deinem Passwort ein!","Login","Abbrechen");
    }
    else
    {
    ShowPlayerDialog(playerid, REGISTER,DIALOG_STYLE_INPUT,"Registration","Guten Tag %s,\nwie es aussieht, bist du neu hier. Bitte gebe ein Passwort ein!\n Aber vegesse es nicht und gebe es niemanden weiter!","Registrieren","Abbrechen");
    }
    In den Public OnPlayerConnect.


    4. error 017: undefined symbol "Spierdatei"
    Das kann so auch nicht gehen da du "player" statt Spielerdatei verwendet hast. Ändere also diese Zeile:
    if(strcmp(key,dini_Get(Spierdatei,"Key"),false))
    in
    if(strcmp(key,dini_Get(player,"Key"),false))


    5. warning 217: loose indentation und warning 219: local variable "name" shadows a variable at a preceding level
    Das "loose indenation" kommt daher dass die Zeilen nicht richtig eingerückt wurden. Entweder rückst du diese richtig ein oder du benutzt
    #pragma tabsize 0
    Kommen wir dann zum Schluss noch zu dem anderen Warning. Dieser sagt dir nur das der Name "name" schon verwendet wird. Ändere ihn also in irgendwas anderes um.

  • Also im Scriptfiles/Player ordner ist nur eine 71ni Datei. Aber sonst nichts o.o


    Bei OnPlayerConnect habe ich das hier:



    public OnPlayerConnect(playerid)
    {
    format(player, sizeof(player),"/Player/%s.ini",name(playerid));

    if(dini_Exists(player))
    {
    ShowPlayerDialog(playerid, LOGIN, DIALOG_STYLE_PASSWORD, "Login","Hi!\nDein Account wurde gefunden. Bitte logge dich mit\nmit deinem Passwort ein!","Login","Abbrechen");
    }
    else
    {
    ShowPlayerDialog(playerid, REGISTER,DIALOG_STYLE_INPUT,"Registration","Guten Tag ,\nwie es aussieht, bist du neu hier. Bitte gebe ein Passwort ein!\n Aber vegesse es nicht und gebe es niemanden weiter!","Registrieren","Abbrechen");
    }
    return 1;
    }

  • Ja, liegt an deiner Register Funktion. Du hast das:
    format(player, sizeof(player), "Player/%.ini",name(playerid));
    Richtig muss es aber so sein:
    format(player, sizeof(player), "Player/s%.ini",name(playerid));
    Du hast das "s" vergessen. So weiß der Server dann nicht wie die Datei heißt und gibt ihr einen zufälligen Namen.

  • stock Spielerladen(playerid)
    {
    format(player, sizeof(player), "/Player/%s.ini",name(playerid));
    GivePlayerMoney(playerid, dini_Int(player,"Money"));
    SetPlayerScore(playerid,dini_Int(player,"Kills"));
    return 1;
    }


    stock Spielerspeichern(playerid)
    {
    format(player, sizeof(player), "/Player/%s.ini",name[playerid]);
    dini_IntSet("/Player/%s.ini", "Money",GetPlayerMoney[playerid]);
    dini_IntSet("/Player/%s.ini","Kills",GetPlayerScore[playerid]);
    return 1;
    }

  • So kann das auch nicht gehen.
    Mach die Spielerspeichern Funktion so:


    stock Spielerspeichern(playerid)
    {
    format(player, sizeof(player), "/Player/%s.ini",name[playerid]);
    dini_IntSet(player, "Money",GetPlayerMoney[playerid]);
    dini_IntSet(player,"Kills",GetPlayerScore[playerid]);
    return 1;
    }

  • Ich würde an deinem Login/Register noch eine Sache revidieren.
    new player[128];
    Wäre Fatal wenn sich 2 Spieler gleichzeitig einloggen würden, denn die Variable kann nur einen Namen gleichzeitig tragen.
    Daher würde ich es wenn überhaupt so machen:
    new player[MAY_PLAYERS][128];
    Dann so:
    format(player[playerid], sizeof(player[playerid]),"/Player/%s.ini",name(playerid));


    Außerdem sind 128 Zellen für den Namen zu viel, 24 bzw. MAX_PLAYER_NAME wäre da besser.