User:Rasikko
Time Functions
These are some helper functions you can use to work with time in the game. I offer three ways of starting them off, as the functions will require any of the three methods.
The first method is through GetCurrentGameTime - Utility. It does the same thing as the Global GameDaysPassed only a little slower.
Float daysPassed = Utility.GetCurrentGameTime()
The second method is through the global.
GlobalVariable property GameDaysPassed auto
The last method is through GetFormFromFile and pulls the global instead of making it a property.
Float daysPassed = (Game.GetFormFromFile(0x00000039, "Fallout4.ESM") as GlobalVariable).GetValue()
Using any of them, you pass into the arguments where needed for the following function:
Float Function GetGameTime(Float afDaysPassed) Global
; Returns the number of hours passed for the current day.
Float gameTime = (afDaysPassed - afDaysPassed as int) * 24.0
if gameTime > 12.00
return gameTime - 12.00
endif
return gameTime
EndFunction
This function requires the return value from GetGameTime() above.
Float Function GetCurrentInGameTime(Float afGameTime) Global
; Returns the actual in game time. h.mm0000
return afGameTime as int + ((((afGameTime - afGameTime as int) * 60.0) as int) / 100.0)
EndFunction
String Function GetCurrentDayOfWeek(Float afDaysPassed) Global
; Returns the day of week. Returns an empty string if something went wrong.
Int dayOfWeek = afDaysPassed as int % 7
if dayOfWeek == 0
return "Sunday"
elseif dayOfWeek == 1
return "Monday"
elseif dayOfWeek == 2
return "Tuesday"
elseif dayOfWeek == 3
return "Wednesday"
elseif dayOfWeek == 4
return "Thursday"
elseif dayOfWeek == 5
return "Friday"
elseif dayOfWeek == 6
return "Saturday"
endif
return ""
EndFunction
Functions for returning units of time since 10.28.2287. 30.416667 is used because Fallout 4 does not have leap years and thus always has common years(365 days).
Float Function GetMonthsPassed(Float afDaysPassed) Global
; Returns the number of month passed since game start.
return afDaysPassed / 30.416667
EndFunction
Float Function GetWeeksPassed(Float afDaysPassed) Global
; Returns the number of weeks passed since game start.
return afDaysPassed / 7.0
EndFunction
Float Function GetTotalHoursPassed(Float afDaysPassed) Global
; Returns the total number of hours passed since game start.
return afDaysPassed * 24.0
EndFunction
Float Function GetTotalMinutesPassed(Float afDaysPassed) Global
; Returns the total number of minutes passed since game start.
return afDaysPassed * 24.0 * 60.0
EndFunction
Float Function GetTotalSecondsPassed(Float afDaysPassed) Global
; Returns the total number of seconds passed since game start.
return afDaysPassed * 24.0 * 60.0 * 60.0
EndFunction
--Rasikko (talk) 2018-08-31T15:50:59 (EDT)
Float Function GetHoursPassedForWeek(Float afDaysPassed) Global
; Returns the number of hours passed for the current week.
return ((afDaysPassed / 7.0) - (afDaysPassed / 7.0) as int) * 168.0
EndFunction
--Rasikko (talk) 2018-09-07T16:15:58 (EDT)
String Function GetAnyDayOfWeek(Int day, Int month, Int year) Global
; returns the day of week that any day falls on for any month of any year.
Int[] KeyValues = new Int[12]
KeyValues[0] = 6
KeyValues[1] = 2
KeyValues[2] = 2
KeyValues[3] = 5
KeyValues[4] = 0
KeyValues[5] = 3
KeyValues[6] = 5
KeyValues[7] = 4
KeyValues[8] = 4
KeyValues[9] = 5
KeyValues[10] = 2
KeyValues[11] = 4
Int dayOfWeek = (29 + day + KeyValues[month] + year) % 7
if dayOfWeek == 0
return "Sunday"
elseif dayOfWeek == 1
return "Monday"
elseif dayOfWeek == 2
return "Tuesday"
elseif dayOfWeek == 3
return "Wednesday"
elseif dayOfWeek == 4
return "Thursday"
elseif dayOfWeek == 5
return "Friday"
elseif dayOfWeek == 6
return "Saturday"
endif
return ""
EndFunction
The key values represent the days of the week that the first day of every month starts on for the year 2287. The formulas involved uses those values to find the days of the week for any day. --Rasikko (talk) 2018-09-09T00:34:08 (EDT)