I'm trying to make a simple time module that fires events when a specific time is reached (sunrise, sunset, midnight) allows me to control the time of day and the speed. For some reason my scripts aren't refrencing values inside of the self table. I changed the toggle method to set self.time and self.multiplier within itself and it worked fine, but when i try doing it by calling another method, it doesn't change the values the rest of the method refrences. It does change A self.time or self.multiplier value, but not the same value self.time or self.multiplier value the rest of the script refrences. Same goes with self:update(), except even when i change self.enabled to true within TOD.new it still doesn't activate and instead prints "it aint enabled" for some reason. Please help.

module script

local TOD = {}
local TOD_mt = {__index = TOD}


function TOD.new()
	local self = {}

	self.time = lighting:GetMinutesAfterMidnight()
	self.multiplier = 1 -- how many irl seconds is 1 in game minute?
	self.enabled = false
	
	return setmetatable(self,TOD_mt)

end


function TOD:ChangeSpeed(multiplier)
	self.multiplier = multiplier
end

function TOD:ChangeTime(gametime)
	self.time = gametime
end


function TOD:Toggle(toggle,gametime,multiplier)
	self.enabled = toggle
	
	if (toggle and multiplier) then
		TOD:ChangeSpeed(multiplier)
	end
	if (toggle and gametime) then
		TOD:ChangeTime(gametime)
	end
	if toggle then
		TOD:update()
	end
end

function TOD:update()
	if not self.enabled then
		print("it aint enabled")
	end
	while self.enabled do
		print("time is changing! Time: "..self.time)
		lighting:SetMinutesAfterMidnight(self.time + 1)
		self.time = lighting:GetMinutesAfterMidnight()
		wait(self.multiplier)
	end
end


return TOD

server script

TOD = require(script.Parent.Time).new()

wait(3)
print("changing time")
TOD:Toggle(true,5*60 + 45,0.001)
print("changing")
wait(3)

print("changing speed")
TOD:ChangeSpeed(1.5)