So the code works for about 2 or 3 minutes then it breaks and the get the error attept to index nil with FindFirstChild
local function activate()
for i,v in pairs(Players:GetChildren()) do
if v ~= game.Players.LocalPlayer then
if game.Players.PlayerAdded or game.Players.CharacterAdded or v then
if v.Character:FindFirstChild('ball') then --error occurs here
end
end
end
end
end
while found == true do
activate() --error occurs here
wait()
end

3 comments
Is character a valid child of v ?
it loops throught the players character if it finds it. it will execute the code
This would normally occur if the script doesn't have enough time to find the set object into the character. The character loads in first and then the script, unless the ball isn't cloning in the character, like answered by Nifemiplayz, use a wait function. Try to use wait(1) instead of wait()