I have this spectator script that I made, but it is not very efficient, and I would like to improve it. How can I make it so instead of me subtracting numbers, it moves down the table as you click?
repeat wait() until game.Players.LocalPlayer.Character local frame = script.Parent:WaitForChild('Frame') local sub = frame:WaitForChild('Subtract') local add = frame:WaitForChild('Add') local name = frame:WaitForChild('Name') local spectating = script.Parent:WaitForChild('SpectatingV') local specButton = frame:WaitForChild('Spectating') local fixSpecB = frame:WaitForChild('FixSpectate') local db = false local playerNO = 1 local players = game.Players:GetChildren() if spectating.Value then specButton.Text = 'Spectating: Yes' elseif not spectating.Value then specButton.Text = 'Spectating: No' end local addF = coroutine.wrap(function() add.MouseButton1Click:connect(function() if not db then db = true if playerNO < #players and #players > playerNO then playerNO = playerNO + 1 elseif #players == playerNO then --playerNO = playerNO - 1 else print('no') end if spectating.Value then game.workspace.CurrentCamera.CameraType = 'Custom' game.Workspace.CurrentCamera.CameraSubject = game.workspace:FindFirstChild(players[playerNO].Name):FindFirstChild('Humanoid') game.Players.LocalPlayer.CameraMode = Enum.CameraMode.Classic end db = false end end) end) local subF = coroutine.wrap(function() sub.MouseButton1Click:connect(function() if not db then db = true if playerNO < #players and #players > playerNO then playerNO = playerNO - 1 elseif playerNO == #players then playerNO = playerNO - 1 else print('no') end if spectating.Value then game.workspace.CurrentCamera.CameraType = 'Custom' game.workspace.CurrentCamera.CameraSubject = game.workspace:FindFirstChild(players[playerNO].Name):FindFirstChild('Humanoid') game.Players.LocalPlayer.CameraMode = Enum.CameraMode.Classic end db = false end end) end) local fixSpec = coroutine.wrap(function() fixSpecB.MouseButton1Click:connect(function() playerNO = 1 end) end) local specB = coroutine.wrap(function() specButton.MouseButton1Click:connect(function() if spectating.Value then spectating.Value = false specButton.Text = 'Spectating: No' game.workspace.CurrentCamera.CameraType = 'Custom' game.workspace.CurrentCamera.CameraSubject = game.Players.LocalPlayer.Character.Humanoid game.Players.LocalPlayer.CameraMode = Enum.CameraMode.Classic elseif not spectating.Value then spectating.Value = true specButton.Text = 'Spectating: Yes' game.workspace.CurrentCamera.CameraType = 'Custom' game.workspace.CurrentCamera.CameraSubject = game.workspace:FindFirstChild(players[playerNO].Name):FindFirstChild('Humanoid') game.Players.LocalPlayer.CameraMode = Enum.CameraMode.Classic end end) end) local doSpec = coroutine.wrap(function() while wait() do if spectating.Value then elseif not spectating.Value then end end end) local writeName = coroutine.wrap(function() while wait() do if playerNO == 0 then playerNO = playerNO + 1 end players = game.Players:GetChildren() -- if players[playerNO].Name == game.Players.LocalPlayer.Character.Name then -- table.remove(players, playerNO) --end print(playerNO) name.Text = players[playerNO].Name end end) addF() subF() specB() doSpec() writeName()