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
  • TimeFactory.


    Die Bibliothek TimeFactory ermöglicht euch, auf eurem SA:MP Server die Uhr schneller laufen zu lassen als in der Realität. Ihr habt dabei aber trotzdem Zugriff auf einen vollständigen Kalender mit Uhrzeit, Wochentagen, Jahr usw. Ihr möchtet dass auf eurem Server die Uhr 4x ( 2-16 ) schneller läuft als in der Realität und trotzdem wissen, welchen Wochentag ihr habt, die Uhrzeit oder den Monat? Dann ist diese Bibliothek eventuell das richtige für euch.


    Ursprünglich wollte ein User so eine Bibliothek als Auftragsarbeit haben. Es kam nicht dazu,aus Spaß hab ich mir die dann selbst erstellt und da ich selber keinen nutzen dafür habe, gebe ich das Paket frei.


    Erklärung:
    Es sind zwei Unix Timestamps zu Beginn nötig um die Berechnungen durchzuführen. Näheres dazu in der Funktion TimeFactory() oder im Spoiler.

    Spoiler anzeigen
    realDate
    UnixTimestamp bei dem in der ECHTEN Welt die Zeit beginnt zu rechnen
    Sinnvoll wäre ein UnixTimestamp zB bei Server Eröffnung um ab da die Zeitrechnung
    laufen zu lassen

    Spoiler anzeigen
    ingameDate
    UnixTimestamp bei dem die Zeitrechnung Ingame beginnt.

    Diese zwei Zeitstempel werden quasi miteinander verbunden. Wieviele Sekunden bereits in der echten Welt vergangen sind, wird an Hand von realDate bemessen. Gebe ich dort den 1.1.2014 00:00:00 [1388530800] an, sind bis heute (28.12.2014 18:55:00) 362 Tage und knapp 19 Stunden vergangen. Diese 361T und 19H werden mit einem Faktor, in dem Falle 4 (2 - 1 möglich), multipliziert und auf ingameDate, dem 1.1.2010 00:00:00 [1262300400], drauf gerechnet. 1444T und 76H bzw 1447Tage und 2 H. Welches Datum sich daraus ergibt, kann mit TimeFactory_InGameDate() bzw TimeFactory_InGameUnix() ausgelesen werden. Welche Funktionen es noch gibt, seht ihr unten im Beitrag.
    Vergeht also bei dem Faktor 4 in der echten Welt 1 Tag, vergehen im Spiel 4 Tage.



    Die Erklärung hinter der Bibliothek ist eventuell mit einem Bild einfacher, daher hier eine Darstellung.

    Faktor 4:
    1 Jahr Echtzeit entspricht 4 Jahren InGame.


    Es stimmt allerdings nicht ganz in diesem Fall, dass 1 Jahr 4 Jahren Ingame entspricht. 2012 war nämlich ein Schaltjahr, weshalb es nicht ganz 4 Jahre sind.
    Welches Datum es exakt wäre in 1 Jahr ausgehend vom 1.1.2014 00:00:00, könnte man mit TimeFactory_Convert() auslesen.

    new
    tm<tTime>;
    tTime = TimeFactory_Convert( REAL_TO_INGAME , 0 , 0 , 0 , 1, 1 , 2015 );
    //Startzeit +1 Jahr: Tue Dec 31 00:00:00 2013


    Damit es eben so genau funktioniert mit dem Datum wird auf ein Plugin zurück gegriffen (CTime).
    Dort (bei dem Plugin) muss darauf geachtet werden, dass der Monat bei 0,das Jahr bei 1900 und die Woche mit dem Sonntag als 0 beginnt.


    Es wird stets in localtime gerechnet, nicht gmtime.
    Siehe dazu mehr hier.



    Funktionen:
    Bei einem tm: Objekt handelt es sich um eine spezielle Struktur:


    Nun zu den eigentlichen Funktionen der Bilbiothek.

    Initialfunktion:
    /*
    Funktion zum Starten der Berechnung. Muss als erstes gemacht werden bevor
    alle anderen Funktionen genutzt werden können.

    realDate
    UnixTimestamp bei dem in der ECHTEN Welt die Zeit beginnt zu rechnen
    Sinnvoll wäre ein UnixTimestamp zB bei Server Eröffnung um ab da die Zeitrechnung
    laufen zu lassen


    ingameDate
    UnixTimestamp bei dem die Zeitrechnung Ingame beginnt.


    speed
    Integer um die Zeitrechnung zu beschleunigen (2 - 16)
    */
    TimeFactory(realdate = 0, ingamedate = 0 , speed = 4)


    Initialwerte:


    /*
    TimeFactory_RealDate
    Gibt den Unix Timestamp von Initialwert speed an


    */
    TimeFactory_RealDate()


    /*
    TimeFactory_IngameInitDate
    Gibt den Unix Timestamp von Initialwert ingameDate an


    */
    TimeFactory_IngameInitDate()


    /*
    TimeFactory_Speed
    Gibt den Zeitfaktor an, der IngameInitDate beschleunigt


    */
    TimeFactory_Speed()


    /*
    TimeFactory_GetElapsedSec
    Zeit in Sec die Vergangen ist bis <jetzt>
    */


    TimeFactory_GetElapsedSec( since = 0 )


    /*
    TimeFactory_InGameUnix
    Gibt den UnixTimestamp der InGame aktuell ist.
    Ist immer größer/gleich dem IngameDate bzw "ingamedate" aus TimeFactory


    */
    TimeFactory_InGameUnix()


    /*
    tm:TimeFactory_InGameDate
    Gibt eine Variable zurück, die basierend auf TimeFactory_InGameUnix
    ein Array zurück gibt mit folgender Struktur:
    var {
    tm_sec, //sekunde
    tm_min, // Minute
    tm_hour, // Stunde
    tm_mday, // Monatstag
    tm_mon, // 0 Jan,1 Feb, 2 Mär, 3 Apr ...
    tm_year, // X - 1900
    tm_wday, // 0 SO,1 MO,2 TU,3 WE,4 TH,5 FR, 6 SA
    tm_yday, // Tag des Jahres
    tm_isdst // DayLightSaving
    }
    Mit dieser Struktur wird das Datum und Zeit genau beschrieben.
    */
    tm:TimeFactory_InGameDate()


    TimeFactory_PrintDate( tm<tTime>)


    /*
    Konvertiert ein Datum von:
    InGame zur Realen Zeiten
    Realen Zeite zu InGame
    enum {
    INGAME_TO_REAL,
    REAL_TO_INGAME
    }

    */
    tm:TimeFactory_Convert(type,second,minute,hour,dayofmonth,month,year)


    InGame_Second()
    InGame_Hour()
    InGame_Minute()
    InGame_DayOfMonth()
    InGame_Month()
    InGame_Year()


    /*
    InGame_WeekDay
    Wochentag
    0 ist Montag
    ...
    6 ist Sonntag
    */
    InGame_WeekDay()


    Vorraussetzung:
    Es muss folgendes Plugin installiert sein: [Plugin] CTime Library


    Screenshots:
    Gibt nicht viel zu zeigen auser ein Beispiel Textdraw, dass das aktuelle Datum und Uhrzeit Ingame anzeigt. Das Script dazu ist im Download enthalten.

    Hotlink #1
    Hotlink #2



    Download:
    goldkiller.bplaced.net
    pastebin.com



    Goldkiller

  • Beitrag von Lux_ ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Zitat

    Du könntest deine Funktionen wie TimeFactory_RealDate() etc.. zu Defines abändern wäre für die Performance besser und erfüllt den selben Zweck.


    Geschmackssache ob man es wirklich braucht oder nicht. Ähnliches könntest du auch bei InGame_* anmerken (außer WeekDay).


    Zitat

    Ist eine gute Idee, würde gut zu RP-Servern passen.


    Eine Verwendung außerhalb von RP Server (oder etwas in der Richtung) wüsste ich auch nicht. Ich wüsste zwar paar sinnvolle Dinge die ich damit machen könnte, da ich aber sowieso keinen Server habe, bleibt es nur die Idee :wacko: .