#alias {_time_check} {
#if {"$current_month" == "0"} {#var {current_month} {1}};
#if {$current_hour < $months[$current_month][dawn]} {
#var {current_state} {NIGHT};
#var {next_state} {DAY};
#math {till_next_state} {$months[$current_month][dawn] - $current_hour + 1}
};
#elseif {$current_hour >= $months[$current_month][dusk]} {
#var {current_state} {NIGHT};
#var {next_state} {DAY};
#math {till_next_state} {25 + $months[$current_month][dawn] - $current_hour}
};
#elseif {($current_hour > $months[$current_month][dawn]) && ($current_hour < $months[$current_month][dusk])} {
#var {current_state} {DAY};
#var {next_state} {NIGHT};
#math {till_next_state} {$months[$current_month][dusk] - $current_hour}
};
#elseif {$current_hour == $months[$current_month][dawn]} {
#var {current_state} {DAWN};
#var {next_state} {DAY};
#var {till_next_state} {1}
};
#if {"$difference" == "0"} {
#if {$current_hour < 12} {#var {current_time} {$current_hour am}};
#elseif {($current_hour > 12) && ($current_hour < 24)} {
#math {current_time} {$current_hour - 12};
#var {current_time} {$current_time pm}
};
#elseif {"$current_hour" == "12"} {#var {current_time} {12 pm}};
#else {#var {current_time} {12 am}}
};
#else {
#math {tmpDiffSeconds} {((@_timer{} - $difference) / 1000000) % 60};
#if {$tmpDiffSeconds < 10} {#var {tmpDiffSecondsPretty} {0}};
#else {#var {tmpDiffSecondsPretty} {}};
#if {$current_hour < 12} {#var {current_time} {${current_hour}:${tmpDiffSecondsPretty}${tmpDiffSeconds} am}};
#elseif {($current_hour > 12) && ($current_hour < 24)} {
#math {current_time} {$current_hour - 12};
#var {current_time} {${current_time}:${tmpDiffSecondsPretty}${tmpDiffSeconds} pm}
};
#elseif {"$current_hour" == "12"} {#var {current_time} {${current_hour}:${tmpDiffSecondsPretty}${tmpDiffSeconds} pm}};
#else {
#math {current_time} {$current_hour - 12};
#var {current_time} {${current_time}:${tmpDiffSecondsPretty}${tmpDiffSeconds} am}
};
#math {secs_to_midnight} {(24 * 60) - (($current_hour * 60) + $tmpDiffSeconds)};
#unvar {tmpDiffSeconds};
#unvar {tmpDiffSecondsPretty}
};
#math {tmpDusk} {$months[$current_month][dusk] - 12};
#if {"%1" != ""} {#send {%1 Game time ${current_time}: Dawn: $months[$current_month][dawn] am, Dusk: $tmpDusk pm.}};
#else {
#echo {Game time %s: Dawn: %s am, Dusk: %s pm.} {$current_time} {$months[$current_month][dawn]} {$tmpDusk};
#echo {It is currently %s, in %s, (%s).} {$current_state} {$current_month_name} {$months[$current_month][season]};
#if {"$till_next_state" != "1"} {#var {tmpNextStatePretty} {s.}};
#else {#var {tmpNextStatePretty} {!}};
#echo {Time left until %s is less than %s tick%s} {$next_state} {$till_next_state} {$tmpNextStatePretty};
#unvar {tmpNextStatePretty};
#math {in_mume_days} {((((($current_month - 1) / 3) * 3 + 3) - $current_month) * 30) + (30 - $current_day) + (1 - ($current_hour / 24))};
#if {"$in_mume_days" != "1"} {#var {in_mume_days_pretty} {s}};
#else {#var {in_mume_days_pretty} {}};
#math {in_rl_hours} {$in_mume_days * 24 / 60};
#if {"$in_rl_hours" != "1"} {#var {in_rl_hours_pretty} {s.}};
#else {#var {in_rl_hours_pretty} {.}};
#regex {$months[$current_month][season]} {{Winter|Spring|Summer|Autumn}$} {
#echo {%s ends in %s mume day%s or %s real-life hour%s} {&1} {$in_mume_days} {$in_mume_days_pretty} {$in_rl_hours} {$in_rl_hours_pretty};
};
#unvar {in_mume_days};
#unvar {in_mume_days_pretty};
#unvar {in_rl_hours_pretty};
#math {in_mume_days} {((12 - $current_month) * 30) + (30 - $current_day) + (1 - ($current_hour / 24))};
#math {in_rl_days} {(($in_mume_days * 24 / 60) / 24)};
#if {"$in_rl_days" != "1"} {#var {in_rl_days_pretty} {s}};
#else {#var {in_rl_days_pretty} {}};
#math {in_rl_hours} {$in_rl_hours % 24};
#if {"$in_rl_hours" != "1"} {#var {in_rl_hours_pretty} {s.}};
#else {#var {in_rl_hours_pretty} {.}};
#echo {Next winter starts in %s real-life day%s and %s hour%s} {$in_rl_days} {$in_rl_days_pretty} {$in_rl_hours} {$in_rl_hours_pretty};
#unvar {in_mume_days};
#unvar {in_rl_days};
#unvar {in_rl_days_pretty};
#unvar {in_rl_hours};
#unvar {in_rl_hours_pretty}
}
}
#function {_timer} {
#format {tmpEpoch} {%U};
#math {result} {$tmpEpoch - $init_timer};
#unvar {tmpEpoch}
}
#alias {_time_tick} {
#math {current_hour} {$current_hour % 24 + 1};
#if {"$current_hour" == "24"} {#math {current_day} {$current_day % 30 + 1}};
#if {("$current_day" == "1") && ("$current_hour" == "24")} {
#math {current_month} {$current_month % 12 + 1};
#foreach {$months[]} {i} {
#if {"$months[$i][name]" == "$current_month_name"} {
#math {tmpNextMonth} {$i + 1};
#if {"$current_month" == "1"} {#math {tmpNextMonth} {$tmpNextMonth - 12}};
#var {current_month_name} {$months[$tmpNextMonth][name]};
#unvar {tmpNextMonth};
#break
}
};
#if {"$current_month" == "1"} {#math {current_year} {$current_year + 1}};
#echo {%s has begun with the month of %s} {$months[$current_month][season]} {$current_month_name}
}
}
#alias {_reset_timer} {
#if {"%1" == "now"} {_time_tick};
#ticker {tick_timer} {_time_tick} {60}
}
#alias {_sync_precise} {
#math {difference} {@_timer{} - %2 * 1000000};
#if {("%1" == "12") && ("%3" == "am")} {#var {current_hour} {24}};
#elseif {("%1" == "12") && ("%3" == "pm")} {#var {current_hour} {12}};
#elseif {"%3" == "am"} {#var {current_hour} {%1}};
#elseif {"%3" == "pm"} {#math {current_hour} {%1 + 12}};
#unticker {tick_timer};
#math {tmpSeconds} {(60 - %2) % 60};
#if {"$tmpSeconds" == "0"} {#delay {tick_reset} {_reset_timer} {$tmpSeconds}};
#else {#delay {tick_reset} {_reset_timer now} {$tmpSeconds}};
#unvar {tmpSeconds}
}
#alias {_sync_event} {
#var {difference} {@_timer{}};
#if {"%2" != ""} {#math {current_hour} {$months[$current_month][%1] + %2}};
#else {#var {current_hour} {$months[$current_month][%1]}};
_reset_timer
}
#alias {ti} {_time_check}
#alias {nti} {_time_check narrate}
#alias {sti} {_time_check say}
#action {^{(?:It seems as if )?}{[Tt]}he day has begun.$} {_sync_event dawn 1}
#action {^Light gradually filters in, proclaiming a new sunrise{(?: outside)?}.$} {_sync_event dawn}
#action {^{(?:It seems as if )?}{[Tt]}he night has begun.$} {_sync_event dusk 1}
#action {^The last ray of light fades, and all is swallowed up in darkness.$} {_sync_event dusk 1}
#action {^The deepening gloom announces another sunset{(?: outside)?}.$} {_sync_event dusk}
#action {^A huge clock is standing here.$} {#send {look at clock}}
#action {^The current time is {[1-9]|1[0-2]}:{[0-5]\d} {[ap]m}.$} {_sync_precise %1 %2 %3}
#action {^{(?:It is )?([1-9]|1[0-2])([ap]m) on \w+|\w+}, the %d{st|nd|rd|th} of %w, {[yY]}ear {(\d{4,4})} of the Third Age.$} {
#var {current_day} {%4};
#var {current_month_name} {%6};
#var {current_year} {%8};
#foreach {$months[]} {i} {
#if {"$months[$i][name]" == "$current_month_name"} {
#math {current_month} {($i - 1) % 12 + 1};
#break
}
};
#if {"%3" != ""} {_sync_precise %2 30 %3}
}
#format {init_timer} {%U}
#var months[1] {{name}{Afteryule}{dawn}{8}{dusk}{18}{season}{Early-Winter}}
#var months[2] {{name}{Solmath}{dawn}{9}{dusk}{17}{season}{Winter}}
#var months[3] {{name}{Rethe}{dawn}{8}{dusk}{18}{season}{Late-Winter}}
#var months[4] {{name}{Astron}{dawn}{7}{dusk}{19}{season}{Early-Spring}}
#var months[5] {{name}{Thrimidge}{dawn}{7}{dusk}{20}{season}{Spring}}
#var months[6] {{name}{Forelithe}{dawn}{6}{dusk}{20}{season}{Late-Spring}}
#var months[7] {{name}{Afterlithe}{dawn}{5}{dusk}{21}{season}{Early-Summer}}
#var months[8] {{name}{Wedmath}{dawn}{4}{dusk}{22}{season}{Summer}}
#var months[9] {{name}{Halimath}{dawn}{5}{dusk}{21}{season}{Late-Summer}}
#var months[10] {{name}{Winterfilth}{dawn}{6}{dusk}{20}{season}{Early-Autumn}}
#var months[11] {{name}{Blotmath}{dawn}{7}{dusk}{20}{season}{Autumn}}
#var months[12] {{name}{Foreyule}{dawn}{7}{dusk}{19}{season}{Late-Autumn}}
#var months[13] {{name}{Narwain}}
#var months[14] {{name}{Ninui}}
#var months[15] {{name}{Gwaeron}}
#var months[16] {{name}{Gwirith}}
#var months[17] {{name}{Lothron}}
#var months[18] {{name}{Norui}}
#var months[19] {{name}{Cerveth}}
#var months[20] {{name}{Urui}}
#var months[21] {{name}{Ivanneth}}
#var months[22] {{name}{Narbeleth}}
#var months[23] {{name}{Hithui}}
#var months[24] {{name}{Girithron}}
#var {current_month} {1}
#var {current_month_name} {}
#var {current_hour} {0}
#var {current_day} {0}
#var {current_year} {0}
#var {current_time} {}
#var {current_state} {}
#var {next_state} {}
#var {till_next_state} {}
#var {difference} {0}
#var {secs_to_midnight} {0}