[Denkanstoß] Login Serie

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 möchte eine Login Serie erstellen. Im Prinzip heißt das, dass wenn ein Spieler 7 Tage am Stück online sein muss, um seinen Loginbonus immer weiter aufzustocken.
    Das ganze soll offentlichtlich datumsgesteuert sein. Ist ein Spieler mitten in der Serie einen Tag lang nicht online, fängt die Serie von vorne an.


    Nun die Frage: Wie stelle ich das am besten an? Das letzte Logindatum mit getdate() in die Userfile speichern und bei jedem erneuten Login dann eine Variable hochzählen, die dann auch in der Userfile gespeichert wird, und den Loginbonus bestimmt. Das würde mcih ja dann zu dem Punkt bringen, dass der Spieler sich 7 beliebiege Male einloggen muss, nicht 7 aufeinanderfolgende Tage. Wie frage ich nun ab, ob der Spieler einen Tag zuvor sich auch schon eingeloggt hat?


    Danke!

  • Du fragst beim Login ab, ob das Datum an dem er sich zuletzt angemeldet hat das gestrige Datum war.
    Nutze dazu: http://forum.sa-mp.com/showthread.php?t=347605 (gettime()-86400).
    Wenn es das ist, zähle die Folge um eins hoch (Folge[playerid]++;).


    Falls nicht, fragst du ab ob das Datum an dem er sich zuletzt angemeldet hat das heutige Datum ist. Falls ja, passiert nichts.


    Falls es weder das heutige noch das gestrige Datum ist, dann setzt du die Folge auf 0/1 (je nach dem wo es anfangen soll).


    Danach speicherst du in einer Variable bzw. eben in die Datei/Datenbank das Login Datum (also das momentane Datum) ab, in Textform, sodass du es beim nächsten Login vergleichen kannst (strcmp).

  • Ich würde den ersten Tag abspeichern.
    Wenn der Spieler nun connected, schaust du ob das heutige Datum einen Tag später ist als das abgespeicherte. Wenn ja, dann zählst du eine Zählvariable in deiner Userdatei hoch. Wenn es derselbe Tag ist, machst du nichts. Sollte mindestens ein Tag dazwischen liegen setzt du den Counter wieder auf 0 und updatest das Datum auf das des Logins..

  • Hm, ich habe mir in der Zwischenzeit etwas anderes überlegt. Und zwar jedem Tag im Jahr eine Zahl zuzuweisen und dann einfach nach Werten vergleichen.
    Also, wenn der Spieler sich an Tag 230 zuletzt eingeloggt hat und heute Tag 340 ist, dann wird die Serie unterbrochen. Das find ich eine (für mich) deutlich verständlichere Variante, nur eben etwas zeilenlastig.


    Jeffry: Wozu brauch ich die Abfrage, ob der letzte Login heute ist/war? Ebenso verstehe ich nicht wieso ich das Datum in Textform vergleichen soll und was das mit strcmo zu tun hat, ich bin leicht verwirrt, tut mir Leid.^^

  • Das würde ich dir so nicht empfehlen, die einzelnen Daten zu nummerieren. Spätestens in einem Schaltjahr wirst du am 29.02. Probleme bekommen, da dieser Tag in deiner Nummerierung nicht vorhanden ist, oder, falls er vorhanden ist, dann hast du jedes Jahr an dem Dateum Probleme, da der Tag ja nicht existiert.
    Das Prüfen des Datums ist da viel einfacher und es passieren keine Fehler.


    In deinem SpielerInfo erstellst du zwei neue Variablen:
    onlineCount,
    lastOnline[11],


    Beim Login prüfst du:
    if(!strcmp(yesterday, SpielerInfo[playerid][lastOnline]))
    {
    SpielerInfo[playerid][onlineCount]++;
    }
    else if(strcmp(today, SpielerInfo[playerid][lastOnline]))
    {
    SpielerInfo[playerid][onlineCount]=1;
    }
    format(SpielerInfo[playerid][lastOnline], 11, today);


    Die Variablen yesterday und today bekommst du über den TimestampToDate.
    //TimestampToDate mit Timestamp gettime()-86400
    new yesterday[11];
    format(yesterday, sizeof(yesterday), "%02d.%02d.%d", day, month, year);
    //gleiches für today, nur mit Timestamp gettime().


    Somit kannst du mit SpielerInfo[playerid][onlineCount] immer abfragen, wie viele Tage hintereinander der Spieler online war.
    Gegebenenfalls machst du diese Prüfung auch beim SpielerSpeichern hin, denn es könnte ja sein, dass der Spieler 100 Stunden am Stück online ist, und das würde sich ja über mehrere Tage verteilen, in denen unter Umständen kein Login erfolgt, sondern nur eine Speicherung.