Server crasht durch TimestampToDate-Funktion

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 Community,


    bei mir crasht der Server sobald ich einen Befehl aufrufe der den stock TimestampToDate aufruft...
    Das Problem ist, das es nur ab und zu funktioniert.
    Bei einigen Sachen funktioniert es und bei einigen nicht...



    Hier die Include: http://forum.sa-mp.com/showthread.php?t=347605


    Code-Beispiel aus meinem Script:
    new registerday[6];
    TimestampToDate(SpielerInfo[playerid][pRegistriert],registerday[0],registerday[1],registerday[2],registerday[3],registerday[4],registerday[5],2);


    format(string,sizeof(string),"Registriert: %02d.%02d.%02d",registerday[2],registerday[1],registerday[0]);
    SendClientMessage(playerid,COLOR_WHITE,string);


    Vielleicht hat jemand eine Lösung woran das liegen könnte...
    Ach ja die Variabeln haben auch einen timestamp inhalt (nur so als Info, bevor die Frage kommt...)

  • Server-Log mit dem Crashdetect Plugin

  • Du hast irgendwo ein Array deklariert, das eine Größe von 12 hat:
    new Arrayname[12]; //"[12]" mal suchen


    Das heißt, der "upper bound" ist 11, du versuchst aber mit Index 12 darauf zuzugreifen. Dafür brauchst du ein Array mit der Größe 13, sprich du musst die [12] zu [13] ändern, bei der "new" Deklaration.

  • Du hast irgendwo ein Array deklariert, das eine Größe von 12 hat:
    new Arrayname[12]; //"[12]" mal suchen


    Das heißt, der "upper bound" ist 11, du versuchst aber mit Index 12 darauf zuzugreifen. Dafür brauchst du ein Array mit der Größe 13, sprich du musst die [12] zu [13] ändern, bei der "new" Deklaration.


    Das einzigste was eine 12 beinhaltet ist das... aus der Include (die ich im Script) eingearbeitet habe.


    new MonthTimes[12][4] =
    {
    { 31, 31, 2678400, 2678400 },
    { 28, 29, 2419200, 2505600 },
    { 31, 31, 2678400, 2678400 },
    { 30, 30, 2592000, 2592000 },
    { 31, 31, 2678400, 2678400 },
    { 30, 30, 2592000, 2592000 },
    { 31, 31, 2678400, 2678400 },
    { 31, 31, 2678400, 2678400 },
    { 30, 30, 2592000, 2592000 },
    { 31, 31, 2678400, 2678400 },
    { 30, 30, 2592000, 2592000 },
    { 31, 31, 2678400, 2678400 }
    };

  • Aus der Jeffry PN :'D


    -


    Es liegt nicht am pRegistriert sonder am pLastlogin....
    Die Variable pLastlogin hat einen Inhalt.. (timestamp)


    Die Funktion klappt bei anderen sachen und bei anderen wiederrum nicht...


    Am LoadPlayer und LoginPassword kann es nicht liegen, weil da alles funktioniert...
    Aber komischerweise wird dort der letzte Login nicht ausgegeben...


    Code:


    new lpdate[6];
    TimestampToDate(SpielerInfo[playerid][pLastlogin],lpdate[0],lpdate[1],lpdate[2],lpdate[3],lpdate[4],lpdate[5],2);
    if(SpielerInfo[playerid][pLastlogin] != 0)
    {
    format(string,sizeof(string),"Letzter Login {00C0FF}>{FFFFFF} d.d.d d:d Uhr",lpdate[2],lpdate[1],lpdate[0],lpdate[3],lpdate[4]);
    SendClientMessage(playerid,COLOR_WHITE,string);
    }


    Bei den stats wird das Registrierungsdatum problemlos angezeigt, nur der letzte Login nicht ^^


    Stats-String:
    TimestampToDate(SpielerInfo[playerid][pRegistriert],registerday[0],registerday[1],registerday[2],registerday[3],registerday[4],registerday[5],2);
    new splogin[6];
    TimestampToDate(SpielerInfo[playerid][pLastlogin],splogin[0],splogin[1],splogin[2],splogin[3],splogin[4],splogin[5],2);
    format(longstring,sizeof(longstring),"%s\n\n{5DD1EE}Sonstiges{FFFFFF}\nRegistriert: %02d.%02d.%02d\nLetzter Login: %02d.%02d.%02d\nIP-Adresse: %s",longstring,registerday[2],registerday[1],registerday[0],splogin[2],splogin[1],splogin[0],ipadresse);






    //EDIT:
    also es muss an der Funktion liegen, da mein IG Account ab der Funktion nicht mehr weiterlädt und mir die konsole errors spuckt....


    Hier die Include im Script:

    Spoiler anzeigen

    #define SPLITTER .

    Spoiler anzeigen
    new MonthTimes[12][4] =
    {
    { 31, 31, 2678400, 2678400 },
    { 28, 29, 2419200, 2505600 },
    { 31, 31, 2678400, 2678400 },
    { 30, 30, 2592000, 2592000 },
    { 31, 31, 2678400, 2678400 },
    { 30, 30, 2592000, 2592000 },
    { 31, 31, 2678400, 2678400 },
    { 31, 31, 2678400, 2678400 },
    { 30, 30, 2592000, 2592000 },
    { 31, 31, 2678400, 2678400 },
    { 30, 30, 2592000, 2592000 },
    { 31, 31, 2678400, 2678400 }
    };

    Spoiler anzeigen
    stock IsLeapYear(year)
    {
    if(year % 4 == 0) return 1;
    else return 0;
    }

    Spoiler anzeigen
    stock TimestampToDate(Timestamp, &year, &month, &day, &hour, &minute, &second, HourGMT, MinuteGMT = 0)
    {
    new tmp = 2;
    year = 1970;
    month = 1;
    Timestamp -= 172800; // Delete two days from the current timestamp. This is necessary, because the timestamp retrieved using gettime() includes two too many days.
    for(;;)
    {
    if(Timestamp >= 31536000)
    {
    year ++;
    Timestamp -= 31536000;
    tmp ++;
    if(tmp == 4)
    {
    if(Timestamp >= 31622400)
    {
    tmp = 0;
    year ++;
    Timestamp -= 31622400;
    }
    else break;
    }
    }
    else break;
    }
    for(new i = 0; i < 12; i ++)
    {
    if(Timestamp >= MonthTimes[i][2 + IsLeapYear(year)])
    {
    month ++;
    Timestamp -= MonthTimes[i][2 + IsLeapYear(year)];
    }
    else break;
    }
    day = 1 + (Timestamp / 86400);
    Timestamp %= 86400;
    hour = HourGMT + (Timestamp / 3600);
    Timestamp %= 3600;
    minute = MinuteGMT + (Timestamp / 60);
    second = (Timestamp % 60);
    if(minute > 59)
    {
    minute = 0;
    hour ++;
    }
    if(hour > 23)
    {
    hour -= 24;
    day ++;
    }
    if(day > MonthTimes[month][IsLeapYear(year)])
    {
    day = 1;
    month ++;
    }
    if(month > 12)
    {
    month = 1;
    year ++;
    }
    }

    Einmal editiert, zuletzt von Sh4kr0n () aus folgendem Grund: Hinzugefügt + Optisch verschönert :)

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