mymonths/months.lua

169 lines
3.6 KiB
Lua

local timechange = 0
local gm = 0
local gn = 0
local timescale = 72
-- If exists read timescale from config and store locally to prevent outside modification
if mymonths.timescale ~= nil then
timescale = mymonths.timescale
end
-- Set holidays
local hol = {
{"12", 14, "It is New Years Eve!"},
{"1", 1, "It is New Years Day!"},
{"3", 12, "It is Friendship Day!"},
{"6", 5, "It is Minetest Day!"},
{"4", 10, "It is Miners Day!"},
{"8", 12, "It is Builders Day!"},
{"10", 8, "It is Harvest Day!"},
}
-- Set days
local days = {
{1, 8, "Monday"},
{2, 9, "Tuesday"},
{3, 10, "Wednesday"},
{4, 11, "Thursday"},
{5, 12, "Friday"},
{6, 13, "Saturday"},
{7, 14, "Sunday"},
}
-- this stops undeclared variable errors
local t1, t2, t3, t4, t5 = 0, 0, 0, 0, 0
-- Set months
local mon = {
{1, "January", t5, t1, .9},
{2, "February", t5, t1, .9},
{3, "March", t4, t2, 1},
{4, "April", t4, t2, 1},
{5, "May", t3, t3, 1},
{6, "June", t3, t3, 1.1},
{7, "July", t1, t5, 1.2},
{8, "August", t1, t5, 1.5},
{9, "September",t3, t3, 1},
{10, "October", t3, t3, 1},
{11, "November", t4, t2, .9},
{12, "December", t4, t2, .9},
}
-- Sets Month and length of day
local timer = 0
minetest.register_globalstep(function(dtime)
-- Checks every X seconds
timer = timer + dtime
--do not change because it will effect other values
if timer < 3 then
return
end
timer = 0
--Day Night Speeds (Thanks to sofar for this)
local dc = tonumber(mymonths.day_counter)
local mc = tonumber(mymonths.month_counter)
local x = ((mc-1)*14)+dc
local ratio = ((math.cos((x / 168) * 2 * math.pi) * 0.8) / 2.0) + 0.5
local nightratio = math.floor(timescale * (ratio + 0.5))
local dayratio = math.floor(timescale / (ratio + 0.5))
--Checks for morning
local time_in_seconds = minetest.get_timeofday() * 24000
if time_in_seconds >= 12001
and timechange == 0 then
timechange = 1
gm = 1
end
if time_in_seconds <= 12000
and timechange == 1 then
timechange = 0
mymonths.day_counter = mymonths.day_counter + 1
end
if mymonths.day_counter >= 15 then
mymonths.month_counter = mymonths.month_counter + 1
mymonths.day_counter = 1
end
if tonumber(mymonths.month_counter) == nil then
mymonths.monthcounter = 6
elseif tonumber(mymonths.month_counter) >= 13 then
mymonths.month_counter = 1
mymonths.day_counter = 1
end
-- Sets time speed in the morning
if time_in_seconds >= 6000
and time_in_seconds <= 12000
and gm == 1 then
minetest.setting_set("time_speed", dayratio)
minetest.chat_send_all("Good Morning! It is "..mymonths.day_name.." "..mymonths.month.." "..mymonths.day_counter)
--minetest.chat_send_all("Time speed is "..dayratio.." and "..nightratio)
---Holidays
for i in ipairs(hol) do
local h1 = hol[i][1]
local h2 = hol[i][2]
local h3 = hol[i][3]
if mymonths.month_counter == h1
and mymonths.day_counter == h2 then
minetest.chat_send_all(h3)
end
end
gm = 0
gn = 1
end
--Months
for i in ipairs(mon) do
local m1 = mon[i][1]
local m2 = mon[i][2]
local m3 = mon[i][3]
local m4 = mon[i][4]
local m5 = mon[i][5]
if mymonths.month_counter == m1 then
mymonths.month = m2
mymonths.day_speed = m3
mymonths.night_speed = m4
end
end
if time_in_seconds >= 22000
and time_in_seconds <= 24000
and gn == 1 then
minetest.setting_set("time_speed", nightratio)
gn = 0
end
-- Set the name of the day
for i in ipairs(days) do
local w1 = days[i][1]
local w2 = days[i][2]
local dy = days[i][3]
if mymonths.day_counter == w1
or mymonths.day_counter == w2 then
mymonths.day_name = dy
end
end
end)