𓁺 Eye — Advanced Time Tracker for Roblox Studio | Free

I found a bug that may reset your data.
Today when I’m casually deving in studio, it is lagging for some reason, so I chose to end the window through task manager, but later when I rejoined the session, it became this:


My data was reset (those 10 minutes are the time I spent before I screenshot this), however, the data below still saves and displays normally:


I thought it might be something about data saving malfunctioning, I am not familiar with how this plugin works, so correct me if I’m wrong

1 Like

Hi!

This is not a bug but a trade-off with the way plugin saves it’s data. It stores data inside of ServerStorage (it needs to access instances, so it uses ObjectValues). But ServerStorage is a part of a place - so if you open a backup place (or autosave place) data will be the same as Eye saved at that moment.
Why I haven’t used Plugin Settings? Because it’s unreliable (can be lost at some point without any reason or memory overusage) and does not allow users to access each other’s data. ServerStorage is way more reliable because it’s a part of a place. But it comes with some trade-offs:

  1. It takes up place’s memory.
    Using ServerStorage thakes up game’s memory.
    So if you need more memory you should consider adding a script to ServerScriptService that will destroy folder ā€œRecPluginsā€
game:GetService("ServerStorage").RecPlugins:Destroy()
script:Destroy()
  1. Saving data has to be periodically.
    Plugins have no way to learn when user saves the place. Thats why Eye auto-saves it’s data every ~15seconds (i don’t remember exactly). So data can be not as accurate if you gonna re-open place.
  2. Memory Leaks.
    If you gonna update some folder every minute you need a way to remove old data.
    :Destroy() doesn’t really fits, because if you gonna undo there will be a tons of warnings in the output. So Eye uses :Remove() and after ~30 minutes calls :Destroy() to prevent Memory Leaks. Thats why if you gonna undo action 30 minutes old there will be a ton of warnings. Sadly I haven’t found a way to solve that.

That’s it.
Reliability comes with a lot of trade-offs, hopefully Roblox will add a proper way of storing data as a plugin:

1 Like

hey here to ask for a feature, currently the serverstorage names are very obtuse and give no hints for what they are for, i’m currently trying to use the folder to get a total amount of seconds, but the number turns out to be way bigger then the actual number displayed in the plugin window.
(current code for calculating it btw

for i, v in ServerStorage.RecPlugins.Eye.Profiles["117236333"].Total:GetDescendants() do
			if v:IsA("ObjectValue") then
				result += v:GetAttribute("timeSpent")
			end
		end
		result = daft:secondstotime(math.floor(result))

)

1 Like

Hi! The reason of a way bigger number is that it actually stores idle time in there, just doesn’t display it. If you need to get the total time without idle time included, you need to check the action index of that time.

for i, v in ServerStorage.RecPlugins.Eye.Profiles["117236333"].Total:GetDescendants() do
	if v:IsA("ObjectValue") then
		-- check for action index
		local actionIndex = v.Parent.Value
		if actionIndex == 0 then -- if action is idle then skip this entry
			continue
		end
		result += v:GetAttribute("timeSpent")
	end
end
result = daft:secondstotime(math.floor(result))

(haven’t tested this code, but it should work)

This is all action’s ids

actionType = {
	Idle = 0,
	Scripting = 1,
	ThinkingAboutCode = 2,
	Configuring = 3,
	Building = 4,
	UIing = 5,
	Testing = 6,
	ModellingNPC = 7,
	Animating = 8,
	Unknown = 9
},

Just to clarify, are you using this in personal script or some sort of a plugin? If you use this in plugin, I can create a much more reliable API (BindableFunction or something) to get Eye’s data. Also note that the data in the folders updates every 10-30 seconds, so it may be outdated.

just a script in my game, so i don’t need exactly accurate stuff.

1 Like

Hi! I turned on Playtest recording but I don’t think I like it, I wanted to disable it but there’s no way to do so

EDIT: I found a way lol, Profile → Settings → track_playtest = false

1 Like

Hi! Good job navigating my stuff!
For improvements, may I know what you didn’t like about it?

yeah I hope there is a button directly displayed on the plugin gui that allows us to turn off playtest tracking

1 Like