Premium 1 Woche - Mysql

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
  • Das ganze geht auch via mysql

    SQL
    DATE_ADD(NOW(), INTERVAL 7 DAY)//beim INSERT befehl natürlich

    dazu braucht auch die spaltedie richtige einstellung

    SQL
    `PremiumTime` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' // beim erstellen der tabelle die jeweilige einstellung


    die reihen folge kann man auch ändern.


    Danach kann man wenn der spieler sich einloggt das ganze noch überprüfen entweder mit einem weiteren query ob die jeweilige zeit größer ist sollte ein ergebnis zurück kommen
    dan hat er noch premium also schon wieder beim einloggen mit NOW() überprüfen.
    oder direkt im query

    SQL
    IF(`Zeit`>NOW(),1,0)) AS premium// das beim select query
  • ich habe bis jetzt so

    ocmd:premium(playerid,params[])
    {
    new pID,dauer;
    new timestamp,str[128];
    timestamp = gettime();
    new sekunden = dauer * 60;
    timestamp += sekunden;
    if(sscanf(params,"ud",pID,dauer)) return SendClientMessage(playerid,GRAU,"Benutze: /premium [SpielerName/ID] [Wochen]");
    format(str,sizeof(str),"Blabla hat %d Wochen Premium",dauer);
    SendClientMessageToAll(ROT,str);
    mysql_SetInt("accounts", "Premium", timestamp, "Name", SpielerName(pID));
    SavePlayer(pID);
    return 1;
    }


    Loadplayer =


    mysql_GetInt("accounts", "Premium", "Name", SpielerName(playerid));


    Aber haut nicht ganz hin :S

  • Wenn du das machst


    new sekunden = dauer * 60;
    timestamp += sekunden;


    Bevor dauer überhaupt initialisiert ist, kann das auch nix werden (0*60)


    edit: und für Wochen musst du aus Sekunden noch Minuten,Stunden,Tage und Wochen machen.

  • ocmd:premium(playerid,params[])
    {
    new pID,dauer;
    new timestamp,str[128];


    if(sscanf(params,"ud",pID,dauer)) return SendClientMessage(playerid,GRAU,"Benutze: /premium [SpielerName/ID] [Wochen]");
    timestamp = gettime();
    new sekunden= dauer * 7*24*60*60;
    timestamp += sekunden;
    format(str,sizeof(str),"Blabla hat %d Wochen Premium",dauer);
    SendClientMessageToAll(ROT,str);
    mysql_SetInt("accounts", "Premium", timestamp, "Name", SpielerName(pID));
    SavePlayer(pID);
    return 1;
    }


    Sie Sequenz war falsch.


    edit:


    new sekunden= dauer * 7*24*60*60;


    macht aus den angegebenen Wochen (dauer)


    z.B.


    1 Woche = 7 Tage = 168 Stunden = 10080 Minuten = 604800 Sekunden
    Und wir brauchen ja Sekunden für den Timestamp

  • ocmd:premium(playerid,params[]) { new pID,dauer; new timestamp,str[128]; if(sscanf(params,"ud",pID,dauer)) return SendClientMessage(playerid,GRAU,"Benutze: /premium [SpielerName/ID] [Wochen]"); timestamp = gettime(); new sekunden= dauer * 7*24*60*60; timestamp += sekunden; format(str,sizeof(str),"Blabla hat %d Wochen Premium",dauer); SendClientMessageToAll(ROT,str); mysql_SetInt("accounts", "Premium", timestamp, "Name", SpielerName(pID)); SavePlayer(pID); return 1; }


    Wie bekomme ich das noch hin, das sie Zeit in der Datenbank abläuft? :S


  • ocmd:premium(playerid,params[])
    {
    new pID,dauer;
    new timestamp,str[128];
    if(sscanf(params,"ud",pID,dauer)) return SendClientMessage(playerid,GRAU,"Benutze: /premium [SpielerName/ID] [Wochen]");
    new sekunden= dauer * 7*24*60*60;
    timestamp = gettime() + sekunden;
    format(str,128,"Blabla hat %d Wochen Premium",dauer);
    SendClientMessageToAll(ROT,str);
    mysql_SetInt("accounts", "Premium", timestamp, "Name", SpielerName(pID));
    return 1;
    }


    warum erst speichern und danach gleich nochmal ?


  • Ist das normal wenn ich dann die db refreshe das die Zahlen nicht runter gehen?