Whenever I use a toggle command script to disable and enable this script, it always works with people who recently join AFTER the script is enabled. The toggle command script works, but the other script doesn't work post-enabling.

The toggle command loads the character after the toggling, which should cause the parts to spawn inside the torso, but they don't. The issue is that they spawn for newer players who join after the command turns the script on.

Here's the script I currently have that gets toggled:

P.PlayerAdded:Connect(function(Player)
	Player.CharacterAdded:Connect(function(Character)
		local Humanoid = Character:WaitForChild'Humanoid'
		local Torso = Character:WaitForChild'Torso'
		
		
		local TouchedTable = {
			{'TopRight', false, CFrame.new(Size.X/2, Size.Y/2, -Size.Z/2)};
			{'TopRight', false, CFrame.new(Size.X/2, Size.Y/2, -Size.Z/2)};
			{'BottomRight', false, CFrame.new(-Size.X/2, Size.Y/2, Size.Z/2)};
			{'BottomRight', false, CFrame.new(-Size.X/2, Size.Y/2, Size.Z/2)};
		}
		
		local Flinging = false
		local Swimming = false
		
		
		local function Weld(Part0, Part1, C0, Parent)
			local W = Instance.new('Weld', Parent)
			W.Part0 = Part0
			W.Part1 = Part1
			W.C0 = C0
		end
		
		local function getSurface(position, object)
			local surfaces = {
				back = object.CFrame * CFrame.new(0, 0, object.Size.Z);
				front = object.CFrame * CFrame.new(0, 0, -object.Size.Z);
				top = object.CFrame * CFrame.new(0, object.Size.Y, 0);
				bottom = object.CFrame * CFrame.new(0, -object.Size.Y, 0);
				right = object.CFrame * CFrame.new(object.Size.X, 0, 0);
				left = object.CFrame * CFrame.new(-object.Size.X, 0, 0);
			}
			local surface = "back"
			for side, cframe in pairs (surfaces) do
				surface = ((position - cframe.p).magnitude > (position - surfaces[surface].p).magnitude and surface or side)
			end
			return surface
		end
		
		local function Fling(Hit)
			if (TouchedTable[1] or TouchedTable[2]) and not (Flinging) then
				Flinging = true
				local Direction
				local Surface = getSurface(Torso.Position, Hit)
				if (Surface == 'front') then
					Direction = Hit.CFrame.lookVector * 500
				elseif (Surface == 'back') then
					Direction = Hit.CFrame.lookVector * -500
				elseif (Surface == 'right') then
					Direction = Hit.CFrame.rightVector * 500
				elseif (Surface == 'left') then
					Direction = Hit.CFrame.rightVector * -500
				elseif (Surface == 'top') then
					Direction = Hit.CFrame.upVector * 500
				elseif (Surface == 'bottom') then
					Direction = Hit.CFrame.upVector * -500
				end
				local Force = Instance.new('BodyVelocity')
				Force.MaxForce = Vector3.new(40000, 0, 40000)
				Force.P = 99999
				Force.Velocity = Direction
				Force.Parent = Torso
				wait(VelocityTime[math.random(1, #VelocityTime)])
				Force:Destroy()
				wait(FlingAgainWait)
				Flinging = false
			end
		end
		
		
		Humanoid.StateChanged:Connect(function(old, new)
			if (new == Enum.HumanoidStateType.Swimming) then
				if not (Swimming) then
					Swimming = true
				end
			else
				if (Swimming) then
					Swimming = false
				end
			end
		end)
		
		for _ = 1, 4, 1 do
			local PClone = Part:Clone()
			PClone.Parent = Torso
			PClone.Name = TouchedTable[_][1]
			Weld(Torso, PClone, TouchedTable[_][3], Torso)
			PClone.Touched:Connect(function(h)
				if (h.ClassName ~= 'Part') or
					(h == Torso) or
					(h.Parent == Character) or
					(h.Parent.Parent == Character) or
					(h.CanCollide == false) or
					(Humanoid.Health <= 0) or
					(Swimming) or
					(Flinging) or
					(game.Players:GetPlayerFromCharacter(h.Parent)) or
					(game.Players:GetPlayerFromCharacter(h.Parent.Parent)) then
					return
				end
				if not (TouchedTable[_][2]) then
					TouchedTable[_][2] = true
					Fling(h)
					wait(PartDebounceWait)
					TouchedTable[_][2] = false
				end
			end)
		end
	end)
end)