Hello folks! So I'm probably 2-3x older than the average developer here (pushing 50) and have zero scripting or programming experience. By even asking this question I’ll expose how much I have to learn:
My game is an obby/puzzle style that times your run to rescue the main character.
I'm currently working through a very odd issue with the timer. If the game is being played solo, it works perfectly: You cross a starting line (touching a brick called "TimerStarter"), and the timer begins counting up 1 second at a time; however, if two people are in the game when a player crosses the start line, the timer starts for that player but increases at 2x the rate it should. If three people are in the game, it increases at 3x the rate. The 2nd or 3rd players are unable to start their timers if this ‘timing multiplier’ has occurred. If the first person leaves, or if only one person is in the game and starts their timer before a 2nd joins, the timer works just fine
The timer functions by referencing a value called “TimerRunning” that is in the player (Set up similar to a leaderstat, but not in the leaderstats folder).
Here is my timer script: (again, please have mercy... )
local Players = game:GetService("Players")
local TouchPart = game.Workspace.TimerStarter
local TimerEndPart = game.Workspace.TimerEnder
local debounce = false
TouchPart.Touched:Connect(function(touched)
if touched.Name == "UpperTorso" then
local Player = Players:GetPlayerFromCharacter(touched.Parent)
if Player then
Player.leaderstats.Timer.Value = 0
Player.TimerRunning.Value = true
if not debounce then
debounce = true
while Player.TimerRunning.Value == true do
wait(1)
Player.leaderstats.Timer.Value = Player.leaderstats.Timer.Value +1
end
debounce = false
end
end
end
end)
And this snippet of my leaderstats and datastore script adds the value "TimerRunning." to the players. (I left out other unrelated
game.Players.PlayerAdded:Connect(function(player)
local TimerRunning = Instance.new("BoolValue")
TimerRunning.Name = "TimerRunning"
TimerRunning.Value = false
TimerRunning.Parent = player
end)
Sorry for the long first post. I appreciate any guidance.

7 comments
If this script for the part is in a script try putting it in a local script, as the timer should only need to be ran on the player. and then when they finish you can just get the server to fetch the time
Hmm - I will try that; thank you so much for the quick reply.
Very odd thing - I put the same script as posted above into a local script (StarterPlayer.StarterCharacterScripts) and it worked fine when testing. Once published, it works fine with one player, and no longer showed the 'multiplier' issue when two players joined. Even with two players joined the timer started fine for the first player, but then would not start at all for a 2nd player.
Add me back on roblox if possible, i'll see if i can help you
Maybe create timer for each player, and let server update its value. From what I see, each player has Timer Script which updates leaderstats. The more player, the more ticks per second it does
Each player updates or adds a second into the timer
Thank you roblor12 and I_Nev - I think you're both getting me closer to the issue, similar to 'GeneratedScript' below.