TimeFactory

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • 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

      PAWN-Quellcode

      1. realDate
      2. UnixTimestamp bei dem in der ECHTEN Welt die Zeit beginnt zu rechnen
      3. Sinnvoll wäre ein UnixTimestamp zB bei Server Eröffnung um ab da die Zeitrechnung
      4. laufen zu lassen
      5. ingameDate
      6. 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.

      PAWN-Quellcode

      1. new
      2. tm<tTime>;
      3. tTime = TimeFactory_Convert( REAL_TO_INGAME , 0 , 0 , 0 , 1, 1 , 2015 );
      4. //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:

      RyDeR` schrieb:

      Enumerator (tm "structure"):

      PAWN-Quellcode

      1. enum e_tm {
      2. tm_sec,
      3. tm_min,
      4. tm_hour,
      5. tm_mday,
      6. tm_mon,
      7. tm_year,
      8. tm_wday,
      9. tm_yday,
      10. tm_isdst
      11. };
      Alles anzeigen

      Quelle

      Nun zu den eigentlichen Funktionen der Bilbiothek.

      PAWN-Quellcode

      1. Initialfunktion:
      2. /*
      3. Funktion zum Starten der Berechnung. Muss als erstes gemacht werden bevor
      4. alle anderen Funktionen genutzt werden können.
      5. realDate
      6. UnixTimestamp bei dem in der ECHTEN Welt die Zeit beginnt zu rechnen
      7. Sinnvoll wäre ein UnixTimestamp zB bei Server Eröffnung um ab da die Zeitrechnung
      8. laufen zu lassen
      9. ingameDate
      10. UnixTimestamp bei dem die Zeitrechnung Ingame beginnt.
      11. speed
      12. Integer um die Zeitrechnung zu beschleunigen (2 - 16)
      13. */
      14. TimeFactory(realdate = 0, ingamedate = 0 , speed = 4)
      15. Initialwerte:
      16. /*
      17. TimeFactory_RealDate
      18. Gibt den Unix Timestamp von Initialwert speed an
      19. */
      20. TimeFactory_RealDate()
      21. /*
      22. TimeFactory_IngameInitDate
      23. Gibt den Unix Timestamp von Initialwert ingameDate an
      24. */
      25. TimeFactory_IngameInitDate()
      26. /*
      27. TimeFactory_Speed
      28. Gibt den Zeitfaktor an, der IngameInitDate beschleunigt
      29. */
      30. TimeFactory_Speed()
      31. /*
      32. TimeFactory_GetElapsedSec
      33. Zeit in Sec die Vergangen ist bis <jetzt>
      34. */
      35. TimeFactory_GetElapsedSec( since = 0 )
      36. /*
      37. TimeFactory_InGameUnix
      38. Gibt den UnixTimestamp der InGame aktuell ist.
      39. Ist immer größer/gleich dem IngameDate bzw "ingamedate" aus TimeFactory
      40. */
      41. TimeFactory_InGameUnix()
      42. /*
      43. tm:TimeFactory_InGameDate
      44. Gibt eine Variable zurück, die basierend auf TimeFactory_InGameUnix
      45. ein Array zurück gibt mit folgender Struktur:
      46. var {
      47. tm_sec, //sekunde
      48. tm_min, // Minute
      49. tm_hour, // Stunde
      50. tm_mday, // Monatstag
      51. tm_mon, // 0 Jan,1 Feb, 2 Mär, 3 Apr ...
      52. tm_year, // X - 1900
      53. tm_wday, // 0 SO,1 MO,2 TU,3 WE,4 TH,5 FR, 6 SA
      54. tm_yday, // Tag des Jahres
      55. tm_isdst // DayLightSaving
      56. }
      57. Mit dieser Struktur wird das Datum und Zeit genau beschrieben.
      58. */
      59. tm:TimeFactory_InGameDate()
      60. TimeFactory_PrintDate( tm<tTime>)
      61. /*
      62. Konvertiert ein Datum von:
      63. InGame zur Realen Zeiten
      64. Realen Zeite zu InGame
      65. enum {
      66. INGAME_TO_REAL,
      67. REAL_TO_INGAME
      68. }
      69. */
      70. tm:TimeFactory_Convert(type,second,minute,hour,dayofmonth,month,year)
      71. InGame_Second()
      72. InGame_Hour()
      73. InGame_Minute()
      74. InGame_DayOfMonth()
      75. InGame_Month()
      76. InGame_Year()
      77. /*
      78. InGame_WeekDay
      79. Wochentag
      80. 0 ist Montag
      81. ...
      82. 6 ist Sonntag
      83. */
      84. InGame_WeekDay()
      Alles anzeigen


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

      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: .