Tingil
Lord of the Links
- Registriert
- 14.07.2000
- Beiträge
- 7.884
Mein Tip: Benutze zur Zeitmessung und -berechnung die Sekunden vom Modulstart ab in einem Integer. Damit hast Du nicht die Ungehauigkeit eines Float und das reicht für 2^32 / 2 - 1 (> 2 Milliarden) Sekunden, oder etwas mehr als 68 Real-Zeit-Jahre; das sollte reichen.
Das sind die Funktionen, die ich mir dazu geschrieben habe:
Wie Du siehst hängt alles davon ab, daß auf dem Modul die lokalen Integer "iZeroYear", "iZeroMonth", "iZeroDay" und "iZeroHour" gespeichert wurden. Das ist alles, was als Voraussetzung benötigt wird.
Das sind die Funktionen, die ich mir dazu geschrieben habe:
Code:
//::///////////////////////////////////////////////
//:: Zeit-Funktionen
//:: tin_i0_time.nss
//:: Copyright (c) 2005 Marius Bauer
//:://////////////////////////////////////////////
/*
*/
//:://////////////////////////////////////////////
//:: Created By: Tingil
//:: Created On: November 1, 2005
//:: Changed On: November 4, 2005
//:://////////////////////////////////////////////
// Gibt den Zeitstempel fuer den uebergebenen Zeitpunkt zurueck.
int MakeTime(int iYear, int iMonth = 1, int iDay = 1, int iHour = 0,
int iMinute = 0, int iSecond = 0);
// Gibt die Anzahl der Sekunden seit dem ersten Ladens des Modules zurueck.
int Now();
// Gibt die Zeitspanne zwischen dem uebergebenen Zeitstempel und jetzt in
// Stunden zurueck.
int GetHoursSince(int iTimestamp);
// Gibt die Zeitspanne zwischen dem uebergebenen Zeitstempel und jetzt in
// Tagen zurueck.
int GetDaysSince(int iTimestamp);
// Stellt die Zeit um iSeconds vor. Mit Aus- und Einblendeeffekt.
void AdvanceTimeBy(int iSeconds);
// Teil der Funktion AdvanceTimeBy.
void AdvanceTimeAndFadeFromBlack(int iSeconds);
// Kommentarklammern nur zum Kompilieren entfernen!
/*void main()
{
}*/
//::///////////////////////////////////////////////
//:: MakeTime
//:: Copyright (c) 2005 Marius Bauer
//:://////////////////////////////////////////////
/*
Gibt den Zeitstempel fuer den uebergebenen
Zeitpunkt zurueck.
1 Jahr = HoursToSeconds(8064) Sekunden
1 Monat = HoursToSeconds(672) Sekunden
1 Tag = HoursToSeconds(24) Sekunden
1 Stunde = HoursToSeconds(1) Sekunden
1 Minute = 60 Sekunden
*/
//:://////////////////////////////////////////////
//:: Created By: Tingil
//:: Created On: November 1, 2005
//:: Changed On: November 4, 2005
//:://////////////////////////////////////////////
int MakeTime(int iYear, int iMonth = 1, int iDay = 1, int iHour = 0,
int iMinute = 0, int iSecond = 0)
{
object oModule = GetModule();
int iYears = iYear - GetLocalInt(oModule, "iZeroYear");
int iMonths = iMonth - GetLocalInt(oModule, "iZeroMonth");
int iDays = iDay - GetLocalInt(oModule, "iZeroDay");
int iHours = iHour - GetLocalInt(oModule, "iZeroHour");
return FloatToInt(HoursToSeconds(8064 * iYears + 672 * iMonths + 24 *
iDays + iHours)) + 60 * iMinute + iSecond;
}
//::///////////////////////////////////////////////
//:: Now
//:: Copyright (c) 2005 Marius Bauer
//:://////////////////////////////////////////////
/*
Gibt die Anzahl der Sekunden seit dem ersten
Ladens des Modules zurueck.
*/
//:://////////////////////////////////////////////
//:: Created By: Tingil
//:: Created On: October 29, 2005
//:: Changed On: November 4, 2005
//:://////////////////////////////////////////////
int Now()
{
return MakeTime(GetCalendarYear(), GetCalendarMonth(), GetCalendarDay(),
GetTimeHour(), GetTimeMinute(), GetTimeSecond());
}
//::///////////////////////////////////////////////
//:: GetHoursSince
//:: Copyright (c) 2005 Marius Bauer
//:://////////////////////////////////////////////
/*
Gibt die Zeitspanne zwischen dem uebergebenen
Zeitstempel und jetzt in Stunden zurueck.
*/
//:://////////////////////////////////////////////
//:: Created By: Tingil
//:: Created On: October 29, 2005
//:: Changed On:
//:://////////////////////////////////////////////
int GetHoursSince(int iTimestamp)
{
int iSeconds = Now() - iTimestamp;
return FloatToInt(iSeconds / HoursToSeconds(1));
}
//::///////////////////////////////////////////////
//:: GetDaysSince
//:: Copyright (c) 2005 Marius Bauer
//:://////////////////////////////////////////////
/*
Gibt die Zeitspanne zwischen dem uebergebenen
Zeitstempel und jetzt in Tagen zurueck.
*/
//:://////////////////////////////////////////////
//:: Created By: Tingil
//:: Created On: October 29, 2005
//:: Changed On:
//:://////////////////////////////////////////////
int GetDaysSince(int iTimestamp)
{
return GetHoursSince(iTimestamp) / 24;
}
//::///////////////////////////////////////////////
//:: AdvanceTimeBy
//:: Copyright (c) 2005 Marius Bauer
//:://////////////////////////////////////////////
/*
Stellt die Zeit um iSeconds Sekunden vor
*/
//:://////////////////////////////////////////////
//:: Created By: Tingil
//:: Created On: October 30, 2005
//:: Changed On:
//:://////////////////////////////////////////////
void AdvanceTimeBy(int iSeconds)
{
// Fade To Black
object oPC = GetFirstPC();
while (oPC != OBJECT_INVALID)
{
if (!GetIsDM(oPC) && !GetPlotFlag(oPC))
{
FadeToBlack(oPC, FADE_SPEED_FASTEST);
}
oPC = GetNextPC();
}
DelayCommand(1.0, AdvanceTimeAndFadeFromBlack(iSeconds));
}
//::///////////////////////////////////////////////
//:: AdvanceTimeAndFadeFromBlack
//:: Copyright (c) 2005 Marius Bauer
//:://////////////////////////////////////////////
/*
Teil der Funktion AdvanceTimeBy.
*/
//:://////////////////////////////////////////////
//:: Created By: Tingil
//:: Created On: October 30, 2005
//:: Changed On:
//:://////////////////////////////////////////////
void AdvanceTimeAndFadeFromBlack(int iSeconds)
{
SetTime(GetTimeHour(), GetTimeMinute(), GetTimeSecond() + iSeconds,
GetTimeMillisecond());
// Fade From Black
object oPC = GetFirstPC();
while (oPC != OBJECT_INVALID)
{
if (!GetIsDM(oPC) && !GetPlotFlag(oPC))
{
FadeFromBlack(oPC, FADE_SPEED_FASTEST);
}
oPC = GetNextPC();
}
}
Zuletzt bearbeitet: