Zeitauslesen --> gettime()

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
  • Moin,


    ich habe eine funktion gescriptet die einen Spieler für bestimmte Zeit etwas gibt nun möchte ich das ich das Datum auslesen kann.


    und noch eine Frage:
    wen ich
    wert=gettime()+(60+zeit);
    habe ist der Wert ja immer in Minuten und wen ich
    wert=gettime()+(180*zeit);
    müsste es ja in Tagen sein oder nicht?


    MFG

  • gettime()

    Zitat

    The function itself returns a Unix Timestamp, however if arguments are specified then the hours, minutes and seconds for the current time are returned.


    Also gibt gettime einen Wert in Sekunden aus. Den Wert müsstest du also durch 60 teilen, damit du Minuten bekommst. Minuten seit dem Anfang des Internets.

  • Ich weiß das beim Auslesen muss man es so machen
    if(gettime() < SpielerInfo[playerid][pVariable]) {
    format(string, sizeof string, "Guten Tag, deine Zeit läuft am %s ab",pVariableZeit);
    SendClientMessage(playerid,WEIß, string);
    }
    ich weiß das man es irgentwie teilen muss aber ich habs nie hinbekommen es war irgentwie
    180/SpielerInfo[playerid][pVariableZeit]


    undnochma zur Tages angabe ist den
    wert=gettime()+(180*zeit);
    richtig? (ich möchte ja den Tag eintragen lassen)

  • Eine Minute hat 60000 Millisekunden.
    Eine Stunde hat 3600000 Millisekunden daher hat ein
    Daher müsste deine Rechnung wie folgt aussehen.
    86400000 ist ein Tag.



    wert=gettime()+(86400000*zeit);

    RFT

  • Nene meine Rechnung müsste schon richtig sein mache es ja so
    ocmd:gp(playerid,params[])
    {
    if(SpielerInfo[playerid][pAdmin]>=5){
    new zeit,pID,wert;
    if(sscanf(params,"ui",pID,zeit))return SendClientMessage(playerid,WEIß,"Nutze: /gp [playerid] [Zeit]");
    if(IsPlayerConnected(pID)){
    if(zeit>0&&zeit<1000){
    new string[128];
    format(string,sizeof(string),"Du hast von %s bis %s Zeit erhalten",SpielerName(playerid),SpielerInfo[playerid][pVariableZeit]);
    SendClientMessage(pID,COLOR_BLAU,string);
    format(string,sizeof(string),"Du hast %s bis %s Zeit gelassen",SpielerName(pID),SpielerInfo[playerid][pVariableZeit]);
    SendClientMessage(playerid,COLOR_BLAU,string);
    wert=gettime()+(60*zeit);
    SpielerInfo[pID][pVariableZeit]=wert;SavePlayer(pID);
    }else SendClientMessage(playerid,WEIß,"Ungültige Zeitangabe");
    }else SendClientMessage(playerid,WEIß,"Der Spieler ist offline");
    }
    return 1;
    }

  • Es ist nicht falsh SSL sonst würde mein Tban CMD ja nicht gehen ;)
    wert=gettime()+(60*time);
    SpielerInfo[pID][pTban] = wert;


    (d.h. wen ich "/tban ID 50" mache wird der Spieler für 50 min gebannt da es so gerechnet wird:
    wert=gettime()+(60*50) #50 hab ich in /tban angegeben#
    dann wird der Spieler für 50min getimebannt
    ich möchte aber mit nem anderem CMD einem Spieler eine "frisst" setzen (in Tagen nicht in Minuten!)
    also wen ich
    "/gp ID 50" mache wird es so gerechnet
    wert=gettime()+(180*50) #müsste eigentlich dann 50Tage sein oder nicht???#
    und wie lese ich die Zeit aus?

  • Der Timestamp gibt aber die Zeit in Sekunden raus.
    Um aus diesen Sekunden dann Minuten zu machen:


    new zeit = gettime();
    new minuten = zeit/60;
    new stunden = minuten/60
    new tage = stunden/24;
    new wochen = tage/7;
    new monate = tage/30; //Durchschnittswert..
    new jahre = monate/12;



    Um einen Spieler dann zu Timebanen:
    new banzeit = zeit+>ZEIT_IN_SEKUNDEN<;



    Hoffe ich konnte dir helfen und habe überhaupt deine Frage richtig verstanden :D
    MfG Firer

  • Hää? totale Zeilenverschwendung FTW? ich möchte mein Script möglichst Zeilensparend halten ;D
    also wen ich 'Tage' ausgeben lassen möchte muss ich so machen oder?
    wer=gettime()+(60*60*24*zeit);
    Ich habs mir jetz so gedacht:
    Minten*Stunden*Tage*Zeitangabe (aus dem CMD)
    ist das so richtig?

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Das hab ich schon soweit D: ich möchte das in dem Text die Zeitangabe steht wann die Zeit endet also z.b.
    ich mache (und möchte z.b. stehen haben [,,,] 50)

    if(gettime() < SpielerInfo[playerid][pVariableZeit]) {
    format(string, sizeof string, "Guten Tag, deine Zeit läuft am %s ab",pVariableZeit);
    SendClientMessage(playerid,WEIß, string);
    }

  • Integers werden immer mit "%d" ausgegeben.
    Und in Tagen wird dann "wer/86400" gerechnet.
    Sofern die Variable "Wer" genutzt wird.




    //Edit: Oder möchtest du das genaue Datum anzeigen lassen ?


    LG RFT

    RFT

  • Ouh sorry flüchtigkeitsfehler mache bei intreger meistens %i (da es eigentlich das selbe ist wie %d)
    if(gettime() < SpielerInfo[playerid][pVariableZeit]) {
    format(string, sizeof string, "Guten Tag, deine Zeit läuft am %i ab",pVariableZeit);
    SendClientMessage(playerid,WEIß, string);
    }
    Also ich möchte das dort dann steht

    Code
    Guten Tag, deine Zeit läuft am DATUM ab


    oder

    Code
    Guten Tag, deine Zeit läuft in ... Tagen ab


    währe zwar geil mit dem Datum aber mit den Tagen reicht mir :D

  • Mit dieser Funktion kannst du den Timestamp konventieren. Hatte ich damals mal aus dem SA-MP.com Forum



    ConvertTimestamp(time, &hour, &minute, &second, &year, &month, &day)
    {
    new remain = time, leapYear = 1, sub, yearCounter;


    for(new i = 0; i < time - sub;)
    {
    sub = (leapYear > 0 && leapYear < 4) ? 31622400 : 31536000;
    if(i == 0)
    {
    i += 31536000;
    remain -= 31536000;
    }
    else
    {
    if(leapYear > 0 && leapYear < 4)
    {
    i += 31536000;
    leapYear++;
    remain -= 31536000;
    }
    else
    {
    i += 31622400;
    leapYear = 1;
    remain -= 31622400;
    }
    }
    if(time > 31536000) yearCounter++;
    }
    year = 1970 + yearCounter;


    sub = (leapYear > 0 && leapYear < 4) ? 86400 : 0;
    if(remain <= 2678400) { month = 1; remain -= 0; }
    else if(remain <= 5097600 + sub) { month = 2; remain -= 2678400; }
    else if(remain <= 7776000 + sub) { month = 3; remain -= 5097600; }
    else if(remain <= 10368000 + sub) { month = 4; remain -= 7776000; }
    else if(remain <= 13046400 + sub) { month = 5; remain -= 10368000; }
    else if(remain <= 15638400 + sub) { month = 6; remain -= 13046400; }
    else if(remain <= 18316800 + sub) { month = 7; remain -= 15638400; }
    else if(remain <= 20995200 + sub) { month = 8; remain -= 18316800; }
    else if(remain <= 23587200 + sub) { month = 9; remain -= 20995200; }
    else if(remain <= 26265600 + sub) { month = 10; remain -= 23587200; }
    else if(remain <= 28857600 + sub) { month = 11; remain -= 26265600; }
    else if(remain <= 31536000 + sub) { month = 12; remain -= 28857600; }


    day = floatround( floatdiv(float(remain), float(86400)), floatround_floor );
    remain -= (day * 86400);


    hour = floatround( floatdiv(float(remain), float(3600)), floatround_floor );
    remain -= (hour * 3600);


    minute = floatround( floatdiv(float(remain), float(60)), floatround_floor );
    remain -= (minute * 60);


    second = remain;
    return 1;
    }


    Das mit den Tagen habe ich weiter oben gepostet "wer/86irgendwas
    Also "(wer-gettime)/86irgendwas


    Deine Variable hieß ja Wer



    LG RFT

    RFT

  • Benutz dazu die Rechnung mit (60*60*24)*DEIN PARAMETER AUS DEM CMD



    //Edit:


    ConvertTimeStamp so benutzen




    new s[6];
    ConvertTimestamp(wer, s[0], s[1], s[2], s[3], s[4], s[5]);


    S[0]=Stunde
    S[1]=Minute
    S[2]=Sekunde
    S[3]=Jahr
    S[4]=Monat
    S[5]=Tag

    RFT

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen