Script doesn’t work after resetting

In serverstorage i have a beach ball with 2 scripts inside and by using print statements im pretty sure the localscript doesnt break but the other regular script isnt working after resetting. The ball gets cloned and put in the backpack and startergear when you purchase it with a GUI.
Explorer: Screen Shot 2021-09-02 at 12.29.16 PM
LocalScript (although it doesnt break)

local tool = script.Parent
local re = tool:WaitForChild("BallRE")


local mouse = game.Players.LocalPlayer:GetMouse()


tool.Activated:Connect(function()
	
	re:FireServer(mouse.Hit)
end)

Server script (The one that breaks)

local tool = script.Parent
local re = tool:WaitForChild("BallRE")
local first_time = true

local cooldown = false


local ps = game:GetService("PhysicsService")
if first_time == true then
	first_time = false
	ps:CreateCollisionGroup("Ball")
	ps:CreateCollisionGroup("Character")
	ps:CollisionGroupSetCollidable("Character", "Ball", false)
end



re.OnServerEvent:Connect(function(plr, mouseHit)

	local char = plr.Character
	local hum = char:FindFirstChild("Humanoid")


	if hum and not cooldown then

		cooldown = true

		hum.Jump = true

		local ballClone = tool.Handle:Clone()
		ballClone.Transparency = 0
		tool.Handle.Transparency = 1


		for i, descendant in pairs(plr.Character:GetDescendants()) do
			if descendant:IsA("BasePart") then ps:SetPartCollisionGroup(descendant, "Character") end
		end
		ps:SetPartCollisionGroup(ballClone, "Ball")


		local velocity = mouseHit.Position + Vector3.new(0, game.Workspace.Gravity * 0.5, 0)
		ballClone.Velocity = velocity

		ballClone.CanCollide = true
		ballClone.Parent = workspace


		game:GetService("Debris"):AddItem(ballClone, 2)

		wait(3)
		ballClone.Velocity = Vector3.new(0, 0, 0)
		tool.Handle.Transparency = 0
		cooldown = false
	end
end)

What do you mean by “breaks”? Does it not work? Does it not work as intended? Whenever you clone a script, the script’s execution state doesn’t clone with it, meaning that the script will completely restart when cloned. That may be the source of your problem.

It doesn’t work at all when you click after you reset

This happended to me too, but I found out the Solution for this. On the LocalScript, do

local tool = script.Parent
local re = tool:WaitForChild("BallRE")


local mouse = game.Players.LocalPlayer:GetMouse()


tool.Activated:Connect(function()
	local player = game.Players:GetPlayerFromCharacter(tool.Parent)
    if player then
       local mouse = player:GetMouse()
       re:FireServer(player, mouse.Hit)
    end
end)

Then on the ServerScript

local tool = script.Parent
local re = tool:WaitForChild("BallRE")
local first_time = true

local cooldown = false


local ps = game:GetService("PhysicsService")
if first_time == true then
	first_time = false
	ps:CreateCollisionGroup("Ball")
	ps:CreateCollisionGroup("Character")
	ps:CollisionGroupSetCollidable("Character", "Ball", false)
end



re.OnServerEvent:Connect(function(local, plr, mouseHit)

	local char = plr.Character
	local hum = char:FindFirstChild("Humanoid")


	if hum and not cooldown then

		cooldown = true

		hum.Jump = true

		local ballClone = tool.Handle:Clone()
		ballClone.Transparency = 0
		tool.Handle.Transparency = 1


		for i, descendant in pairs(plr.Character:GetDescendants()) do
			if descendant:IsA("BasePart") then ps:SetPartCollisionGroup(descendant, "Character") end
		end
		ps:SetPartCollisionGroup(ballClone, "Ball")


		local velocity = mouseHit.Position + Vector3.new(0, game.Workspace.Gravity * 0.5, 0)
		ballClone.Velocity = velocity

		ballClone.CanCollide = true
		ballClone.Parent = workspace


		game:GetService("Debris"):AddItem(ballClone, 2)

		wait(3)
		ballClone.Velocity = Vector3.new(0, 0, 0)
		tool.Handle.Transparency = 0
		cooldown = false
	end
end)

I tried this and now the script doesn’t work at all (I changed the local, plr, mouseHit to plr, mouseHit) instead of just when I reset