I have this script in a tool.
ball = script.Parent
running = false
hoop1 = game.Workspace["Basketball Court"].Hoop1
hoop2 = game.Workspace["Basketball Court"].Hoop2
ball.Equipped:connect(function()
character = ball.Parent
local weld1 = Instance.new("Weld",character.Torso)
weld1.Name = "Right Arm"
weld1.Part0 = character.Torso
weld1.Part1 = character["Right Arm"]
weld1.C1 = CFrame.new(-1.5,0.5,0.25) * CFrame.Angles(4.75,-0.15,0)
local weld2 = Instance.new("Weld",character.Torso)
weld2.Name = "Left Arm"
weld2.Part0 = character.Torso
weld2.Part1 = character["Left Arm"]
weld2.C1 = CFrame.new(1.5,0.5,0.25) * CFrame.Angles(4.75,0.15,0)
ball.GripPos = Vector3.new(0,1.3,0.1)
character.Humanoid.Running:connect(function()
running = true
ball.GripPos = Vector3.new(1,0,0)
weld1.C1 = CFrame.new(-1.5,0.5,0.5) * CFrame.Angles(4.7,0,0)
weld2:Destroy()
end)
end)
ball.Unequipped:connect(function()
running = false
player = ball.Parent.Parent
character = player.Character
for i,v in pairs(character:FindFirstChild("Torso"):GetChildren()) do
if v:IsA("Weld") then
v:Destroy()
end
end
end)
local c1 = coroutine.resume(coroutine.create(function()
while running == true do
print("Does this crud even work?")
repeat
ball.GripPos = Vector3.new(ball.GripPos.X + 0.1,0,0)
wait()
until ball.GripPos.X == 2.5
repeat
ball.GripPos = Vector3.new(ball.GripPos.X - 0.1,0,0)
wait()
until ball.GripPos.X == 1
wait(0.5)
end
end))
Whenever I print the value 'running', it's true when I want it to be and the coroutine runs, but the loop inside doesn't. I have no errors in the output. Any suggestions?

2 comments
Try getting rid of the coroutine (there's no reason to use one here) -- that may fix the problem on its own, otherwise, fewer things for us to check
I removed the coroutine. Still doesn't work.