The issue with your code is simple: You have a remote event nested inside of another remote event.
Each time replicatedStorge.Remotes.LowerBar.OnServerEvent:Connect is called, it starts a new listener for runService.Heartbeat:Connect. This inturn makes your code execute more.
Solution: (Take the event in question and un-nest it)
01 | local replicatedStorge = game:GetService( "ReplicatedStorage" ) |
03 | local runService = game:GetService( "RunService" ) |
06 | local players = game:GetService( "Players" ) |
07 | local turnpart = game.Workspace.TurnTo |
19 | players.PlayerAdded:Connect( function (player) |
20 | local turnTime = Instance.new( "IntValue" ,player) |
22 | turnTime.Name = "Turn" |
24 | turnTime.Changed:Connect( function (property) |
25 | replicatedStorge.Remotes.ResetUpdate:FireClient(player,turnTime.Value, maxTime) |
31 | replicatedStorge.Remotes.LowerBar.OnServerEvent:Connect( function (player,state,seat) |
32 | local character = player.Character |
33 | local humanoid = character:FindFirstChild( "Humanoid" ) |
34 | local root = humanoid:FindFirstChild( "HumanoidRootPart" ) |
35 | local car = seat.Parent |
36 | local gyro = seat.BodyGyro |
38 | local turnTime 2 = player.Turn |
40 | if state = = "Begin" then |
41 | turnTable [ player.Name ] = true |
42 | elseif state = = "Ended" and turnTable [ player.Name ] then |
43 | turnTable [ player.Name ] = nil |
48 | runService.Heartbeat:Connect( function () |
49 | for index, players in pairs (players:GetChildren()) do |
50 | local turnTime = players.Turn |
51 | local name = players.Name |
54 | if not turnTable [ name ] then |
55 | if turnTime.Value > maxTime then |
56 | turnTime.Value = maxTime |
57 | elseif turnTime.Value < maxTime then |
58 | turnTime.Value = turnTime.Value + regen |
62 | if turnTime.Value > = cost then |
63 | turnTime.Value = turnTime.Value - cost |