ff_u_p_time
Persistent time, saved every game hour in database.
Loads previous time on startup.
Variables
ENABLE__FF_U_P_TIME: (string) (opt-out) Set to “N” on module to disable unit.
Source code
// @code
#include "ff_i_core"
const string LOCAL_CAMPAIGN_NAME = "calendar";
const string ENABLE__FF_U_P_TIME = "ENABLE__FF_U_P_TIME";
// -----------------------------------------------------------------------------
void SaveCalendar();
void SaveCalendar()
{
string sCampaign = GetCampaignName(LOCAL_CAMPAIGN_NAME);
int nYear = GetCalendarYear();
int nMonth = GetCalendarMonth();
int nDay = GetCalendarDay();
int nHour = GetTimeHour();
int nMinute = GetTimeMinute();
int nSeconds = GetTimeSecond();
SetCampaignInt(sCampaign, "YEAR", nYear);
SetCampaignInt(sCampaign, "MONTH", nMonth);
SetCampaignInt(sCampaign, "DAY", nDay);
SetCampaignInt(sCampaign, "HOUR", nHour);
SetCampaignInt(sCampaign, "MINUTE", nMinute);
LogNotice("Persistent date & time saved: " + GetGameDate() + " " + GetGameTime());
}
// -----------------------------------------------------------------------------
void LoadCalendar();
void LoadCalendar()
{
string sCampaign = GetCampaignName(LOCAL_CAMPAIGN_NAME);
int nYear = GetCampaignInt(sCampaign, "YEAR");
int nMonth = GetCampaignInt(sCampaign, "MONTH");
int nDay = GetCampaignInt(sCampaign, "DAY");
int nHour = GetCampaignInt(sCampaign, "HOUR");
int nMinute = GetCampaignInt(sCampaign, "MINUTE");
if (nYear == 0)
{
SaveCalendar();
LoadCalendar();
}
else
{
// Delay so the log gets shown after module load.
DelayCommand(0.0001f, LogNotice("Current date & time: " + GetGameDate() + " " + GetGameTime()));
DelayCommand(0.0002f, LogNotice("Persistent date & time loaded: " + GetDateString(nYear, nMonth, nDay) + " " + GetTimeString(nHour, nMinute, 0)));
// WARNING:
// SetTime makes DelayCommand execute all delayed commands at once.
//
// Since this is only executed once, ensure it is executed before other delays
// go off by having it before the module start.
// Set time can make the day advance, so do it first.
SetTime(nHour, nMinute, 0, 0);
SetCalendar(nYear, nMonth, nDay);
NWNX_Events_SignalEvent(ON_CALENDAR_TIME_CHANGED, GetModule());
}
}
// -----------------------------------------------------------------------------
void main()
{
if (!GetModuleFlag(ENABLE__FF_U_P_TIME, TRUE))
return;
string sEvent = GetCurrentEvent();
if (sEvent == ON_REGISTER)
{
LoadCalendar();
SubscribeToEvent(ON_CALENDAR_HOUR, __FILE__);
SubscribeToEvent(ON_CALENDAR_TIME_CHANGED, __FILE__);
}
else if (sEvent == ON_CALENDAR_HOUR)
SaveCalendar();
else if (sEvent == ON_CALENDAR_TIME_CHANGED)
SaveCalendar();
}