Hello there, I tried to create a hitbox that damage anything it touches once and I managed to that with a tool click. Now i tried to do the same thing for a tool Q keybind, but it does only damage players and not NPCs even though it's the same script I used for the tool click (which can damage NPCs). The hitbox is created at the end of my animation.
Here's the script for the hitbox creation and damage part:
heavypunchAnimationTrack:GetMarkerReachedSignal("Go"):Connect(function() local hitbox = Instance.new("Part") hitbox.Parent = game.Workspace hitbox.Name = "Hitbox" hitbox.Transparency = 0.5 hitbox.Size = Vector3.new(10,30,15) hitbox.CanCollide = false hitbox.Anchored = true hitbox.Position = char.RightHand.Position + HRP.CFrame.lookVector * 16 hitbox.Orientation = char.RightHand.Orientation local debounceDamage = false hitbox.Touched:Connect(function(part) local stat2Store = DataStore2("Stat2", player) local stat2Value = stat2Store:Get(1) local target = part.Parent:FindFirstChild("Humanoid") if target and target.Health > 0 and debounceDamage == false then part.Parent.Humanoid:TakeDamage(15 + stat2Value * 5) debounceDamage = true end end) wait(1) humanoid.WalkSpeed = 16 hitbox:Destroy() end)
As I said, this works perfectly fine on players but does not damage NPCs. This is what I used for the tool click:
local hitbox = Instance.new("Part") hitbox.Parent = game.Workspace hitbox.Name = "Hitbox" hitbox.Position = char.RightHand.Position hitbox.Orientation = char.RightLowerArm.Orientation hitbox.Massless = true hitbox.Size = Vector3.new(5,5,3) hitbox.Transparency = 0.7 hitbox.Color = Color3.new(165,0,2) hitbox.CanCollide = false local weld = Instance.new("WeldConstraint") weld.Parent = game.Workspace weld.Part0 = char.RightHand weld.Part1 = hitbox -- Plays animation punchAnimationTrack:Play() -- Sets damage and gives rewards on kill local debounceDamage = false hitbox.Touched:Connect(function(part) local target = part.Parent:FindFirstChild("Humanoid") local experienceStore = DataStore2("Exp", player) local currencyStore = DataStore2("Currency", player) local stat2Store = DataStore2("Stat2", player) local stat2Value = stat2Store:Get(1) if target and target.Health > 0 and debounceDamage == false then part.Parent.Humanoid:TakeDamage(10 + stat2Value * 2) if player and target.Health <= 0 then local expReward = part.Parent.ExpReward.Value local currencyReward = part.Parent.CurrencyReward.Value experienceStore:Increment(expReward) currencyStore:Increment(currencyReward) end debounceDamage = true end end) wait(0.6) -- Destroys hitbox hitbox:Destroy()
I don't see what's so different about the second script that it can damage any humanoid, but the first one can only damage player humanoids. I hope one of you can help me with that problem.