Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
✓ ANSWER ACCEPTED

Script Running Faster Each Time Pressed?

Hello im having a issue with one of my scripts.

Every time it runs it runs a thouthand times. Execpt it keeps getting quicker.

-- Code in question

	runService.Heartbeat:Connect(function()
		for index, players in pairs(players:GetChildren())do
			local turnTime = players.Turn
			local name = players.Name
			
			
			if not turnTable[name] then
				if turnTime.Value > maxTime then
					turnTime.Value = maxTime
				elseif turnTime.Value < maxTime then
					turnTime.Value = turnTime.Value + regen
					
				end
			else 
				if turnTime.Value >= cost then
					turnTime.Value = turnTime.Value - cost
					
				else
					turnTable[name] = nil
				end
			
			end
		end
	end)

-- full code

local replicatedStorge = game:GetService("ReplicatedStorage")

local runService = game:GetService("RunService")


local players = game:GetService("Players")
local turnpart = game.Workspace.TurnTo


local maxTime = 500
local regen = 1
local cost = 1


local turnTable = {}



players.PlayerAdded:Connect(function(player)
	local turnTime = Instance.new("IntValue",player)
	turnTime.Value = 500
	turnTime.Name = "Turn"
	
	turnTime.Changed:Connect(function(property)
		replicatedStorge.Remotes.ResetUpdate:FireClient(player,turnTime.Value, maxTime)
		print("firingf21")
	end)
end)


replicatedStorge.Remotes.LowerBar.OnServerEvent:Connect(function(player,state,seat)
	local character = player.Character
	local humanoid = character:FindFirstChild("Humanoid")
	local root = humanoid:FindFirstChild("HumanoidRootPart")
	local car = seat.Parent
	local gyro = seat.BodyGyro
	local turn = false
	local turnTime2 = player.Turn
	
	if state == "Begin" then
		turnTable[player.Name] = true
	elseif state == "Ended" and turnTable[player.Name] then
		turnTable[player.Name] = nil
				
	end
	

	runService.Heartbeat:Connect(function()
		for index, players in pairs(players:GetChildren())do
			local turnTime = players.Turn
			local name = players.Name
			
			
			if not turnTable[name] then
				if turnTime.Value > maxTime then
					turnTime.Value = maxTime
				elseif turnTime.Value < maxTime then
					turnTime.Value = turnTime.Value + regen
					
				end
			else 
				if turnTime.Value >= cost then
					turnTime.Value = turnTime.Value - cost
					
				else
					turnTable[name] = nil
				end
			
			end
		end
	end)

1 answer

✓ Accepted answer

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)

local replicatedStorge = game:GetService("ReplicatedStorage")

local runService = game:GetService("RunService")


local players = game:GetService("Players")
local turnpart = game.Workspace.TurnTo


local maxTime = 500
local regen = 1
local cost = 1


local turnTable = {}



players.PlayerAdded:Connect(function(player)
	local turnTime = Instance.new("IntValue",player)
	turnTime.Value = 500
	turnTime.Name = "Turn"
	
	turnTime.Changed:Connect(function(property)
		replicatedStorge.Remotes.ResetUpdate:FireClient(player,turnTime.Value, maxTime)
		print("firingf21")
	end)
end)


replicatedStorge.Remotes.LowerBar.OnServerEvent:Connect(function(player,state,seat)
	local character = player.Character
	local humanoid = character:FindFirstChild("Humanoid")
	local root = humanoid:FindFirstChild("HumanoidRootPart")
	local car = seat.Parent
	local gyro = seat.BodyGyro
	local turn = false
	local turnTime2 = player.Turn
	
	if state == "Begin" then
		turnTable[player.Name] = true
	elseif state == "Ended" and turnTable[player.Name] then
		turnTable[player.Name] = nil
		
	end
end)

runService.Heartbeat:Connect(function()
	for index, players in pairs(players:GetChildren())do
		local turnTime = players.Turn
		local name = players.Name
		
		
		if not turnTable[name] then
			if turnTime.Value > maxTime then
				turnTime.Value = maxTime
			elseif turnTime.Value < maxTime then
				turnTime.Value = turnTime.Value + regen
				
			end
		else 
			if turnTime.Value >= cost then
				turnTime.Value = turnTime.Value - cost
				
			else
				turnTable[name] = nil
			end
			
		end
	end
end)

1 comment

0

Perfect Solution. Plus learn a lesson! Thanks

This discussion is preserved as it was. New answers, comments, and votes are closed.