I'm trying to make a script run off a while true do loop, so that after a given amount of time, the script will go from 2d-3d and then 3d-2d I get this error: 16:48:50.769 - Workspace.Script:98: ')' expected (to close '(' at line 54) near 'while'
Here's the main script
while true do
function onPlayerRespawned(newPlayer)
while newPlayer.Character == nil do
wait(.1)
end
local h = newPlayer.Character.Humanoid
local torso = h.Parent.Torso
local hatmass = 0
for i = 1, #h.Parent:getChildren() do
if h.Parent:getChildren()[i].className == "Hat" then
hatmass = h.Parent:getChildren()[i].Handle:getMass()
print(hatmass)
end
end
local bp = Instance.new("BodyPosition")
bp.Name = "2D-Movement"
wait(.1)
bp.position = torso.Position
bp.P = 1000000
bp.D = 1000000
bp.maxForce = Vector3.new(10, 10, 10)
bp.Parent = torso
local bf = Instance.new("BodyForce")
bf.force = Vector3.new(0, 4*(14+hatmass), 0)
bf.Parent = torso
local cam = Instance.new("Part")
cam.Name = "" ..torso.Parent.Name.. "Camera"
cam.CFrame = CFrame.new(torso.Position + Vector3.new(0, 0, 3), torso.Position)
cam.Transparency = 1
cam.CanCollide = false
cam.Parent = game.Workspace
local bp = Instance.new("BodyPosition")
bp.position = cam.Position
bp.maxForce = Vector3.new(1000000, 1000000, 1000000)
bp.Parent = cam
local bg = Instance.new("BodyGyro")
bg.maxTorque = Vector3.new(0, 0, 0)
bg.Parent = cam
local scr = script.LocalScript:clone()
scr.Disabled = false
scr.Parent = torso.Parent
end
function onPlayerAdded(newPlayer)
newPlayer.Changed:connect(function(property)
if property == "Character" then
onPlayerRespawned(newPlayer)
end
wait(10)
local larm = script.Parent:FindFirstChild("Left Arm")
local rarm = script.Parent:FindFirstChild("Right Arm")
function findNearestTorso(pos)
local list = game.Workspace:children()
local torso = nil
local dist = 1000
local temp = nil
local human = nil
local temp2 = nil
for x = 1, #list do
temp2 = list[x]
if (temp2.className == "Model") and (temp2 ~= script.Parent) then
temp = temp2:findFirstChild("Torso")
human = temp2:findFirstChild("Humanoid")
if (temp ~= nil) and (human ~= nil) and (human.Health > 0) then
if (temp.Position - pos).magnitude < dist then
torso = temp
dist = (temp.Position - pos).magnitude
end
end
end
end
return torso
end
function Hit(hit)
local human = hit.Parent:FindFirstChild("Humanoid")
if human ~= nil then
human.Health = human.Health -8
end
end
larm.Touched:connect(Hit)
rarm.Touched:connect(Hit)
end
Local script inside:
local player = game.Players.LocalPlayer
local camera = game.Workspace:findFirstChild("" ..player.Name.. "Camera")
local cam = game.Workspace.CurrentCamera
cam.CameraSubject = camera
cam.CameraType = "Attach"
while player ~= nil do
if player.Character ~= nil then
if player.Character.Humanoid.Health == 0 then break end
camera.BodyPosition.position = player.Character.Torso.Position + Vector3.new(0, 0, 3)
camera.BodyGyro.cframe = CFrame.new(camera.Position, player.Character.Torso.Position)
wait(0.05)
else break end
end
wait(3)
camera:remove()
THANKS!

3 comments
All you need to do is ad a ')' after the 'end' on line 96. It just needs you to close the parentheses from the start of the function.
Please put the full script.
this is the full script