Character gets his arm or leg detached AND launched even tho he got shot (died normally)

Hello everyone, i made a ragdoll system where if you die it gets cloned and if its an explosion the ragdoll gets launched and a arm or leg gets detached

The problem is that if i reset, it still launches the ragdoll and a arm or leg gets detached.
any fixes?

i have tried making a function where it detects wether its an explosion or not, but it didn’t work

the script goes into serverscriptservice:

local players = game:GetService("Players")
local debris = game:GetService("Debris")

local CORPSE_LIFETIME = 999 -- Time in seconds before the ragdoll is removed

-- Function to create a ragdoll for R6 characters
local function makeRagDoll(doll)
	for _, part in ipairs(doll:GetDescendants()) do
		if part:IsA("Motor6D") then
			local socket = Instance.new("BallSocketConstraint")
			local a1 = Instance.new("Attachment")
			local a2 = Instance.new("Attachment")

			a1.Parent = part.Part0
			a2.Parent = part.Part1
			socket.Parent = part.Parent
			socket.Attachment0 = a1
			socket.Attachment1 = a2

			a1.CFrame = part.C0
			a2.CFrame = part.C1
			socket.LimitsEnabled = true
			socket.TwistLimitsEnabled = true

			part:Destroy()
		end
	end
end

local function makeOriginalInvisible(char)
	for _, part in ipairs(char:GetDescendants()) do
		if part:IsA("BasePart") then
			part.Transparency = 1
			part.CanCollide = false
		end
	end
end

-- Function to calculate explosion direction and add a combined impulse (upward + towards explosion)
local function addExplosionImpulse(ragdoll, impulseForce, explosionPosition)
	for _, part in ipairs(ragdoll:GetDescendants()) do
		if part:IsA("BasePart") then
			-- Calculate the direction from the part to the explosion position (corrected vector)
			local direction = (explosionPosition - part.Position).unit  -- Vector pointing from the part to the explosion

			-- Create an upward force vector (increased upward force)
			local upwardForce = Vector3.new(0, 1, 0) * (impulseForce * 1.2)  -- Increased upward force to make it fly stronger

			-- Combine the horizontal directional force and the stronger vertical upward force
			local combinedForce = direction * impulseForce * 0.3 + upwardForce  -- Adjusted horizontal force ratio

			-- Apply the combined force to the part
			part:ApplyImpulse(combinedForce)
		end
	end
end

-- Function to handle the ragdoll process when a player dies
local function handleDeath(char, explosionPosition)
	char.Archivable = true
	local dChar = char:Clone()
	char.Archivable = false

	local humanoidRootPart = dChar:FindFirstChild("HumanoidRootPart")
	if humanoidRootPart then
		humanoidRootPart.Anchored = false
		humanoidRootPart:Destroy()
	end

	if dChar then
		dChar.Parent = workspace
		dChar:SetPrimaryPartCFrame(char:GetPrimaryPartCFrame())

		for _, part in ipairs(dChar:GetDescendants()) do
			if part:IsA("BasePart") then
				part.CanCollide = true
				part.Anchored = false
				part.Transparency = 0
			end
		end

		local humanoid = dChar:FindFirstChildOfClass("Humanoid")
		if humanoid then
			humanoid.Health = 0
			humanoid.DisplayDistanceType = Enum.HumanoidDisplayDistanceType.None
			humanoid:ChangeState(Enum.HumanoidStateType.Dead)
		end

		makeRagDoll(dChar)

		-- Add explosion impulse to the ragdoll
		addExplosionImpulse(dChar, 200, explosionPosition)  -- Adjust impulse force as needed (200 is a moderate value)

		-- 100% chance to rip off an arm from the ragdoll
		local arm = math.random(1, 2) == 1 and dChar:FindFirstChild("Left Arm") or dChar:FindFirstChild("Right Arm")
		if arm then
			-- Handle the Left Shoulder Attachment if the arm is the LeftArm
			if arm.Name == "Left Arm" then
				local leftshoulderAttachment = arm:FindFirstChild("LeftShoulderAttachment")
				if leftshoulderAttachment then
					leftshoulderAttachment:Destroy()  -- Disconnect the LeftShoulderAttachment
				end
			end

			-- Handle the Right Shoulder Attachment if the arm is the RightArm
			if arm.Name == "Right Arm" then
				local rightshoulderAttachment = arm:FindFirstChild("RightShoulderAttachment")
				if rightshoulderAttachment then
					rightshoulderAttachment:Destroy()  -- Disconnect the RightShoulderAttachment
				end
			end

			-- Detach and remove the arm from the ragdoll
			arm:Destroy()
			print("Arm ripped off from the ragdoll!")
		end

		debris:AddItem(dChar, CORPSE_LIFETIME)
	else
		warn("Failed to clone character!")
	end

	makeOriginalInvisible(char)
end

-- Connect to player death event
players.PlayerAdded:Connect(function(player)
	player.CharacterAdded:Connect(function(char)
		local humanoid = char:WaitForChild("Humanoid")
		humanoid.BreakJointsOnDeath = false
		humanoid.Died:Connect(function()
			print("Player Has Died!", player.Name)

			-- Define the explosion position (could be any position in the world)
			local explosionPosition = Vector3.new(0, 10, 0)  -- Example explosion location at (0, 10, 0)

			-- Handle the death and ragdoll with explosion
			handleDeath(char, explosionPosition)
		end)
	end)
end)

Thank you!