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