Tage abfragen?

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.


    Wie kann ich machen das wenn der Spieler am z.B. 15.3.2013 premium bekommt.
    Wie kann ich machen das er genau am 20.3.2013 sein premium verliert, egal ob
    online oder offline. Und wie lasse ich es dann in die Tabelle eintragen?


    Hoffe ihr könnt mir helfen ^^
    Lg :)

  • Dies muss irgendwo abgespeichert werden für den user:
    new PremiumBis[playerid] = gettime() + (60*60*24*tage); // Rechne x tage zu gettime() hinzu


    und so kann es dann überprüft werden ob ein spieler Premium besitzt:
    if(PremiumBis[playerid] > gettime())
    {
    ...
    }



    Erklärung: gettime() liefert die Anzahl an vergangenen Sekunden seit dem 1.Januar 1970 zurück

  • Also könnte ich des theoretisch so machen;:


    Spieler Peter hat 30 Tage Premium am 5.3.2013 gekauft!
    Er ist bis zum 15.3.2013 offline und hat automatisch nur noch 20 Tage premium.
    Er ist aber in der Zeit OFFLINE


    Der befehl womit er premium bekommt


    CMD:premium(playerid,params[])
    {
    SpielerInfo[playerid][pPremiumZeit]=gettime()+ (60*60*24*30);
    SendClientMessage(playerid, Rot, "Du hast nun 30 Tage Premium");
    return 1;
    }


    Und dann wenn er auf den Server kommt, wird das gemacht...

    if(SpielerInfo[playerid][pPremiumZeit]>gettime())
    {
    SendClientMessage(playerid, Weiß, ""COLR"[Premium]"COLW" Du hast dich als "COLB"V.I.P "COLW"eingeloggt!");
    new string[128];
    format(string,sizeof(string),"[Premium]"COLW" Du bist noch für %d Tage ein V.I.P!",SpielerInfo[playerid][pPremiumZeit]);
    SendClientMessage(playerid, Rot, string);
    }

  • Falls du das ganze mit einem MySQL Server verbunden hast, kannst du auch einfach jeden Tag um 0:00Uhr folgendes MySQL Statement ausführen.


    SQL
    UPDATE tabelle
    SET date = '0000-00-00'
    WHERE date <= '2013-07-20'


    das WHERE date <= musst du dann halt durch das aktuelle Datum ersetzen. Musst halt anpassen, welche Felder geupdated werden sollen.
    (Musst halt nur aufpassen mit den Spielern die online sind, das diese das auch Ingame verlieren, sonst wird es wenn sie leaven auch wieder gespeichert.)

  • genau, ist eine Zahl


    Anzahl vergangener Sekunden seit 1970 + x tage in Sekunden speicherst du ab


    und mit dem if wird überprüft ob die abgespeicherte Zahl noch größer ist als die Aktuell vergangenen Sekunden seit 1970.



    mysql_SetInt(Tabelle_Spieler, "PremiumZeit", SpielerInfo[playerid][ pPremiumZeit ], "Name", GetName(playerid));


    SpielerInfo[playerid][ pPremiumZeit ] = mysql_GetInt(Tabelle_Spieler, "PremiumZeit", "Name", GetName(playerid));



    ? ^^


    Aber danke :)

  • Arbeite dabei mit Timestamps entweder du speicherst das als integer ab also die zahl die du per gettime zurück bekommst und dazu deine 7 tage addierst
    und beim auslesen abgleichst oder du machst das ganze per mysql oder du arbeitest direkt mit mysql mit der DATE_ADD funktion beim auslesen kannst du entweder
    ein query senden um das zu überprüfen wo du als zweite where clausel schaust ob das jetzige datum geringer ist als das in der datenbank wird ein eintrag gefunden
    so wird dir der wert zurück gegeben wenn nicht bleibt dieser 0.


    SQL
    WHERE DATE(`tabellename`) > NOW()


    jedoch denk ich das geht auch alles per mysql dennoch weiß ich dies nicht