For reasons unknown to me, I compulsively use LocalScripts whenever theoretically possible. I'm using a LocalScript to make a digital clock, and so I'm needing to use a RemoteFunction, which is linked to a Script also inside the GUI, which returns the TimeOfDay as a string.
In Studio, the script(s) work perfectly and the clock works. However, in online mode, after a bit of testing, it appears that the LocalScript doesn't even invoke the RemoteFunction properly (I've tried using print(myFunction:InvokeServer()) and it returns nothing - no output, not even a "nil"). Does anyone know why this might be?
Scripts:
ClientManager (LocalScript)
coroutine.resume(coroutine.create(function() -- TimeLabel script.Parent.Parent.Frame.Frames.Main.TimeLabel.Text = script.Parent.ServerManager.GetServerTime:InvokeServer() script.Parent.ServerManager.GetServerTime.ServerTimeChanged.OnClientEvent:connect(function() script.Parent.Parent.Frame.Frames.Main.TimeLabel.Text = script.Parent.ServerManager.GetServerTime:InvokeServer() end) end)) -- 3Tech -- Do not redistribute!
ServerManager (Script)
local TimeStats = { last = tostring(game:GetService("Lighting").TimeOfDay), current = tostring(game:GetService("Lighting").TimeOfDay), } function script.GetServerTime.OnServerInvoke() return tostring(game:GetService("Lighting").TimeOfDay) end game:GetService("Lighting").Changed:connect(function(property) if tostring(property):lower() == "timeofday" then TimeStats.current = tostring(game:GetService("Lighting").TimeOfDay) if TimeStats.current ~= TimeStats.last then script.GetServerTime.ServerTimeChanged:FireClient(script.Parent.Parent.Parent.Parent) end end end) -- 3Tech -- Do not redistribute!
Additionally, ServerTimeChanged is a RemoteEvent that is fired whenever the TimeOfDay is changed. I also hate using while loops. Again, I don't know why.
Many thanks.