I'm creating a pvp system like in blox fruits. I created an accessory with a handle that damages any player in range when my weapon tool is activated. I used Touched event to detect players but when I hit a player, the damage is higher than expected although I have added a debounce and set the handle's CanTouch property to false. How can I fix this? Here is my code:
char:WaitForChild("DamagingPart").Handle.Touched:Connect(function()
local currentDamagedPlayer
print("abc")
for _, child in pairs(char.DamagingPart.Handle:GetTouchingParts()) do
if (game.Players:FindFirstChild(child.Parent.Name or child.Parent.Parent.Name) and not (game.Players.LocalPlayer.Name == (child.Parent.Name or child.Parent.Parent.Name)) and game.Players[child.Parent.Name].Team ~= game.Players.LocalPlayer.Team) and child.Parent.Name ~= currentDamagedPlayer then
currentDamagedPlayer = game.Players[child.Parent.Name or child.Parent.Parent.Name].Name
local randomDamage = math.random(tool.Damage.Value - 1, tool.Damage.Value + 1)
game.ReplicatedStorage.WeaponInteraction:FireServer("Damage", game.Players[child.Parent.Name or child.Parent.Parent.Name], randomDamage)
game.Players.LocalPlayer.PlayerGui.ScreenGui.AddWood.Text = randomDamage
local position, onScreen = game.Workspace.CurrentCamera:WorldToScreenPoint(child.Parent.HumanoidRootPart.Position or child.Parent.Parent.HumanoidRootPart.Position)
game.Players.LocalPlayer.PlayerGui.ScreenGui.AddWood.Position = UDim2.new(0, position.X, 0, position.Y)
randomDamage = nil
position, onScreen = nil, nil
spawn(function()
game.Players.LocalPlayer.PlayerGui.ScreenGui.AddWood.Visible = true
game.Players.LocalPlayer.PlayerGui.ScreenGui.AddWood:TweenPosition(game.Players.LocalPlayer.PlayerGui.ScreenGui.AddWood.Position + UDim2.new(0, 0, 0, -50))
wait(1)
game.Players.LocalPlayer.PlayerGui.ScreenGui.AddWood.Visible = false
end)
currentDamagedPlayer = nil
currentCutTree = nil
char.DamagingPart.Handle.CanTouch = false
end
end
char.DamagingPart.Handle.CanTouch = false
end)
I tried putting the "char.DamagingPart.Handle.CanTouch = false" under "local currentDamagedPlayer" but the for loop didn't run although the print function did. Why wouldn't the for loop work?
