Sword Block Not Working

My problem is that when a player blocks even after they stop blocking they still don’t take damage.

i have a script and a local script

local script:

local swingAnims = {
	'rbxassetid://10799628961', --1
	'rbxassetid://10799639636', --2
	'rbxassetid://10805184969', --3
	'rbxassetid://10805270660', --4
	'rbxassetid://10799639636', --5
}

local textures = {
	'rbxassetid://8821193347',
	'rbxassetid://8821230983',
	'rbxassetid://8821246947',
	'rbxassetid://8821254467',
	'rbxassetid://8821272181',
	'rbxassetid://8821280832',
	'rbxassetid://8821300395',
	'rbxassetid://8821311218',
	'rbxassetid://8896641723',
}

local blockAnims = {
	'rbxassetid://10875156928', -- block
	'rbxassetid://10822445779', -- parry
	'rbxassetid://10817949810', -- hit
}

local t = game:GetService("TweenService")
local rs = game:GetService("ReplicatedStorage")
local uis = game:GetService("UserInputService")

local resources =  rs.Combat.Sword
local fx = resources.Fx
local remote = rs.Remotes.Combat

local p = game.Players.LocalPlayer
local c = script.Parent
local hrp = c.HumanoidRootPart
local combo = 1
local lasthit = 0
local cd = false
local anim = script:WaitForChild("Animation")
local blocking = false

local UserInputService = game:GetService("UserInputService") -- get userinputservice



local function setUp(char)
	local handle = fx.Handle:Clone()
	handle.Parent = char
	local m6d = Instance.new("Motor6D", handle)
	m6d.Part0 = char.RightHand
	m6d.Part1 = handle
	m6d.C1 = CFrame.new(0,.125,0)
	local model = fx.BasicKatana:Clone()
	model.Parent = workspace.Fx
	local weld = Instance.new("Weld", model)
	weld.Part0 = handle
	weld.Part1 = model
	weld.C1 = CFrame.new(0,0,0) * CFrame.Angles(math.rad(90),0,0)
end

for i,v in pairs(game.Players:GetChildren() ) do
	repeat wait() until v.Character
	setUp(v.Character)
	v.CharacterAdded:Connect(function(char)
		char:WaitForChild("RightHand")
		setUp(char)
	end)
end

game.Players.PlayerAdded:Connect(function(player)
	player.CharacterAdded:Connect(function(char)
		char:WaitForChild("RightHand")
		setUp(char)
	end)
end)

local function slash(char, comboN)
	local m = fx.Slash:Clone()
	local hrp = char.HumanoidRootPart

	if comboN == 1 then
		wait(.2)
		m.CFrame = hrp.CFrame * CFrame.new(2.5,0,-3) * CFrame.Angles(0,math.rad(180),math.rad(-275))
		t:Create(m, TweenInfo.new(.5), {CFrame = m.CFrame * CFrame.Angles(0,math.rad(-100),0), Transparency = 1}):Play()
	elseif comboN == 2 then
		wait(.2)
		m.CFrame = hrp.CFrame * CFrame.new(0,0,-3) * CFrame.Angles(0,math.rad(30),math.rad(0))
		t:Create(m, TweenInfo.new(.5), {CFrame = m.CFrame * CFrame.Angles(0,math.rad(-100),0), Transparency = 1}):Play()
	elseif comboN == 3 then
		wait(.2)
		m.CFrame = hrp.CFrame * CFrame.new(0,0,-3) * CFrame.Angles(0,math.rad(0),math.rad(180))
		t:Create(m, TweenInfo.new(.5), {CFrame = m.CFrame * CFrame.Angles(0,math.rad(-100),0), Transparency = 1}):Play()
	elseif comboN == 4 then
		wait(.2)
		m.CFrame = hrp.CFrame * CFrame.new(0,0,-3) * CFrame.Angles(0,math.rad(30),math.rad(50))
		t:Create(m, TweenInfo.new(.5), {CFrame = m.CFrame * CFrame.Angles(0,math.rad(-100),0), Transparency = 1}):Play()
	elseif comboN == 5 then
		wait(.3)
		m.CFrame = hrp.CFrame * CFrame.new(2.5,0,-3) * CFrame.Angles(0,math.rad(180),math.rad(-275))
		t:Create(m, TweenInfo.new(.5), {CFrame = m.CFrame * CFrame.Angles(0,math.rad(-100),0), Transparency = 1}):Play()
		m.CFrame = hrp.CFrame * CFrame.new(0,0,-6) * CFrame.Angles(0,math.rad(30),math.rad(0))
		t:Create(m, TweenInfo.new(.5), {CFrame = hrp.CFrame * CFrame.new(0,0,-10) * CFrame.Angles(0,math.rad(-100),0), Transparency = 1}):Play()
		
	end
	t:Create(m.PointLight, TweenInfo.new(.4), {Brightness = 0}):Play()
	
	local count = 1
	
	local connection
	connection = game["Run Service"].RenderStepped:Connect(function()
		m.Mesh.TextureId = textures[count]
		count = count + 1
		if count > #textures then
			count = 1
			connection:Disconnect()
		end
	end)
	
	m.Parent = workspace.Fx
	
	if char == c then
		local hb = Instance.new("Part", workspace.Fx)
		hb.Size = Vector3.new(10,3,7)
		hb.CFrame = hrp.CFrame * CFrame.new(0,0,-5)
		hb.Anchored = true
		hb.CanCollide = false
		hb.Transparency = .6
		hb.Name = "hb"
		hb.Material = Enum.Material.ForceField
		hb.CanQuery = false

		local con
		con = hb.Touched:Connect(function()
			con:Disconnect()
		end)

		local hits = {}
		for i,v in pairs(hb:GetTouchingParts()) do
			if v:IsDescendantOf(char) == false then
				if v.Parent:FindFirstChildWhichIsA("Humanoid") and table.find(hits, v.Parent) == nil then

					table.insert(hits, v.Parent)	
				end
			end
		end
		
		if #hits == 0 then
			local bv = Instance.new("BodyVelocity",char.PrimaryPart)
			bv.MaxForce = Vector3.new(99999,0,99999)
			bv.Name = "v"
			bv.P = 10
			game.Debris:AddItem(bv,.2)
			if comboN == 5 then
				bv.Velocity = char.PrimaryPart.CFrame.LookVector * 50
			else
				bv.Velocity = char.PrimaryPart.CFrame.LookVector * 20
			end
		end
		
		local data = {hb = hits, action = "hit", combo = comboN, c = char, parry = blockAnims[2], hit = blockAnims[3]}
		remote:FireServer(data)

		hb:Destroy()
		
	end
end

uis.InputBegan:Connect(function(input, gpe)
	if gpe then return end
	if input.UserInputType == Enum.UserInputType.MouseButton1 and cd == false and c:FindFirstChild("Stun") == nil then
		c.Humanoid.WalkSpeed = 0
		c.Humanoid.JumpHeight = 0
		
		if tick() - lasthit > 1 then
			combo = 1
		end
		lasthit = tick()
		
		cd = true
		
		anim.AnimationId = swingAnims[combo]
		local load = c.Humanoid:LoadAnimation(anim):Play()
		
		local data = {char = c, combo, action = "slash"}
		remote:FireServer(data)
		slash(c, combo)
		
		if combo == 5 then
			combo = 1
		else
			combo = combo + 1
		end
		wait(.1)
		
		cd = false
		c.Humanoid.WalkSpeed = 16
		c.Humanoid.JumpHeight = 7.2
	elseif input.UserInputType == Enum.UserInputType.MouseButton2 and cd == false and c:FindFirstChild("Stun") == nil then
		anim.AnimationId = blockAnims[1]
		local load = c.Humanoid:LoadAnimation(anim)
		load:Play()
		blocking = true
		
		local data = {char = c, action = "block"}
		remote:FireServer(data)
		repeat
			wait()
		until blocking == false
		load:Stop()
	end
end)

local sound = Instance.new("Sound", game.Workspace)
sound.SoundId = "rbxassetid://5917820543" 

if not sound.IsLoaded then -- wait for sound to load to prevent errors
	sound.Loaded:Wait()
end

UserInputService.InputBegan:Connect(function(input) -- when player presses a key
	if input.UserInputType == Enum.UserInputType.MouseButton1 and cd == false and combo == 1 then 
		sound:Play() -- play the sound
		print("sound played")
	end
end)

local sound1 = Instance.new("Sound", game.Workspace)
sound1.SoundId = "rbxassetid://5917819729" 

if not sound1.IsLoaded then -- wait for sound to load to prevent errors
	sound1.Loaded:Wait()
end

UserInputService.InputBegan:Connect(function(input) -- when player presses a key
	if input.UserInputType == Enum.UserInputType.MouseButton1 and cd == false and combo == 2 then 
		sound1:Play() -- play the sound
		print("sound played")
	end
end)

local sound2 = Instance.new("Sound", game.Workspace)
sound2.SoundId = "rbxassetid://5917820121" 

if not sound2.IsLoaded then -- wait for sound to load to prevent errors
	sound2.Loaded:Wait()
end

UserInputService.InputBegan:Connect(function(input) -- when player presses a key
	if input.UserInputType == Enum.UserInputType.MouseButton1 and cd == false and combo == 3 then 
		sound2:Play() -- play the sound
		print("sound played")
	end
end)

local sound3 = Instance.new("Sound", game.Workspace)
sound3.SoundId = "rbxassetid://5917820543" 

if not sound3.IsLoaded then -- wait for sound to load to prevent errors
	sound3.Loaded:Wait()
end

UserInputService.InputBegan:Connect(function(input) -- when player presses a key
	if input.UserInputType == Enum.UserInputType.MouseButton1 and cd == false and combo == 4 then 
		sound3:Play() -- play the sound
		print("sound played")
	end
end)

local sound4 = Instance.new("Sound", game.Workspace)
sound4.SoundId = "rbxassetid://9119746592" 

if not sound4.IsLoaded then -- wait for sound to load to prevent errors
	sound4.Loaded:Wait()
end

UserInputService.InputBegan:Connect(function(input) -- when player presses a key
	if input.UserInputType == Enum.UserInputType.MouseButton1 and cd == false and combo == 5 then 
		sound4:Play() -- play the sound
		print("sound played")
	end
end)

uis.InputBegan:Connect(function(input, gpe)
	if input.UserInputType == Enum.UserInputType.MouseButton2 and blocking then
		blocking = false
		local data = {char = c, action = "unblock"}
		remote:FireServer(data)
	end
end)

remote.OnClientEvent:Connect(function(data)
	if data.action == "slash" then
		slash(data.char, data.comboN)
	elseif data.action == "hit" then
		for i,v in pairs(data.hb) do
			if v:FindFirstChild("Block") then
				if v.Block.Value == true then
					local hit = fx.Block:Clone()
					hit.Anchored = false
					local weld = Instance.new("Weld", hit)
					weld.Part0 = v.PrimaryPart
					weld.Part1 = hit
					
					hit.Position = v.PrimaryPart.Position
					
					hit.Attachment.Left:Emit(15)
					hit.Attachment.Right:Emit(15)
					hit.Attachment.OtherLines:Emit(15)
					
					hit.Parent = workspace.Fx	
					t:Create(hit.Attachment.light, TweenInfo.new(.4), {Brightness = 0}):Play()
					game.Debris:AddItem(hit,1)
					
				else
					local hit = fx.Hit:Clone()
					hit.Anchored = false
					local weld = Instance.new("Weld", hit)
					weld.Part0 = v.PrimaryPart
					weld.Part1 = hit
					weld.C1 = weld.C1 * CFrame.Angles(0,0,math.rad(math.random(-300,300)))
					hit.Position = v.PrimaryPart.Position

					hit.Attachment.Left:Emit(15)
					hit.Attachment.OtherLines:Emit(15)
					hit.Attachment.Right:Emit(15)

					hit.Parent = workspace.Fx	
					t:Create(hit.Attachment.light, TweenInfo.new(.4), {Brightness = 0}):Play()
					game.Debris:AddItem(hit,1)
				end
			else
				
				local hit = fx.Hit:Clone()
				hit.Anchored = false
				local weld = Instance.new("Weld", hit)
				weld.Part0 = v.PrimaryPart
				weld.Part1 = hit
				weld.C1 = weld.C1 * CFrame.Angles(0,0,math.rad(math.random(-300,300)))
				hit.Position = v.PrimaryPart.Position

				hit.Attachment.Left:Emit(15)
				hit.Attachment.OtherLines:Emit(15)
				hit.Attachment.Right:Emit(15)

				hit.Parent = workspace.Fx	
				t:Create(hit.Attachment.light, TweenInfo.new(.4), {Brightness = 0}):Play()
				game.Debris:AddItem(hit,1)
			end
		end
	end
end)

script:

local remote = game.ReplicatedStorage.Remotes.Combat

remote.OnServerEvent:Connect(function(p,data)
	if data.action == "slash" then
		for i,player in pairs(game.Players:GetChildren()) do
			if player ~= p then
				remote:FireClient(player, data)
			end
		end
	elseif data.action == "hit" then
		remote:FireAllClients( data)
		for i,v in pairs(data.hb) do
			if v:FindFirstChild("Block") then
				if v.Block.Value == true then
					local parryAnim = Instance.new("Animation")
					parryAnim.AnimationId = data.parry
					v.Humanoid:LoadAnimation(parryAnim):Play()
					parryAnim:Destroy()
				else
					local hitAnim = Instance.new("Animation")
					hitAnim.AnimationId = data.hit
					v.Humanoid:LoadAnimation(hitAnim):Play()
					hitAnim:Destroy()
					v.Humanoid:TakeDamage(10)
				end
			else
				local hitAnim = Instance.new("Animation")
				hitAnim.AnimationId = data.hit
				v.Humanoid:LoadAnimation(hitAnim):Play()
				hitAnim:Destroy()
				v.Humanoid:TakeDamage(10)
			end
			
			local bv = Instance.new("BodyVelocity", v.PrimaryPart)
			bv.MaxForce = Vector3.new(99999,0,99999)
			bv.Name = "v"
			bv.P = 10
			game.Debris:AddItem(bv,.2)

			if data.combo == 5 then
				bv.Velocity = data.c.PrimaryPart.CFrame.LookVector * 75
			else
				bv.Velocity = data.c.PrimaryPart.CFrame.LookVector * 30
			end

			local bv = Instance.new("BodyVelocity",data.c.PrimaryPart)
			bv.MaxForce = Vector3.new(99999,0,99999)
			bv.Name = "v"
			bv.P = 10
			game.Debris:AddItem(bv,.2)
			if data.combo == 5 then
				bv.Velocity = data.c.PrimaryPart.CFrame.LookVector * 50
			else
				bv.Velocity = data.c.PrimaryPart.CFrame.LookVector * 20
			end 

			local stun = Instance.new("BoolValue", v)
			stun.Name = "Stun"
			stun.Value = false
			game.Debris:AddItem(stun,1)
		end
	elseif data.action == "block" then
		if data.char:FindFirstChild("Block") then
			data.char.Block.Value = true
		else
			local block = Instance.new("BoolValue", data.char)
			block.Value = true
			block.Name = "Block"
		end
	elseif data.action == "unblock" then
		if data.char:FindFirstChild("Block") then
			data.char.Block.Value = false
			data.char.Block:Destroy()
		end
	end
end)

can someone please explain why this is happening