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();
}