Hello,
I’m trying to make my attack damage all the enemies that touches it and not only one, but I have no clue how to do that.
Example of what I want to achive :
What I have :
Any help is very appreciated!
Hello,
I’m trying to make my attack damage all the enemies that touches it and not only one, but I have no clue how to do that.
Example of what I want to achive :
What I have :
Any help is very appreciated!
Are you using a .Touched
event on the ‘attack/arm thingy’?
If so you might have set a debounce for it like this:
local debounce = false
thing.Touched:Connect(function(hit)
if (not debounce) then
debounce = true
print(hit)
task.wait(1)
debounce = false
end
end)
Instead you could use a different type of debounce like this:
local debouncedParts = {}
thing.Touched:Connect(function(hit)
if (not debouncedParts[hit]) then
debounce[hit] = true
print(hit)
task.wait(1)
debounce[hit] = nil
end
end)
Something along the lines of that (Didn’t test it)
Use Raycasts,
Fire them Opposite to the Direction the Player is Facing.
(This will make the ray go Behind the Dummy you originally attacked)
Now Just Check if The .Instance of the Resulted Ray Has A Humanoid,
If it has a humanoid, that means we need to damage it And Continue the Ray To Go And Search for More Dummy’s.
If the .Instance of the Resulted Ray is not a humanoid, that means that there is no more dummys behind the One Original Dummy, so we just damage that one dummy and thats it.
Yeah I did use .Touched
Tbh, I watched some tutorials but it didn’t work. The tutorial was telling me to create a table and then put everyone that touches the hitbox inside of it.
May I see the code block that manages the .Touched
event?
I won’t really interfere, but the reason .Touched
doesn’t work is because it’s broken. It has trouble firing for whatever reason. The best way I think you could handle damaging the enemies is to raycast, or possibly do something with Region3.
Sure.
local TouchedEnemies = {}
local DamageDebounce = false
Hitbox.Touched:Connect(function(hit)
if hit.Parent.Name == Character.Name then return end
if hit and not DamageDebounce then
hit.Parent:FindFirstChildWhichIsA("Humanoid") then
DamageDebounce = true
hit.Parent:FindFirstChildWhichIsA("Humanoid"):TakeDamage(20)
table.insert(TouchedEnemies, hit.Parent)
wait(2)
DamageDebounce = false
end
end)
You could possibly try this:
local TouchedEnemies = {}
local DamageDebounces = {}
Hitbox.Touched:Connect(function(hit)
if hit.Parent.Name == Character.Name then
return
end
if not DamageDebounces[hit] then
hit.Parent:FindFirstChildWhichIsA("Humanoid")
DamageDebounces[hit] = true
hit.Parent:FindFirstChildWhichIsA("Humanoid"):TakeDamage(20)
table.insert(TouchedEnemies, hit.Parent)
task.wait(2)
DamageDebounces[hit] = nil
end
end)
Instead of a debounce for every enemy, each enemy now has it’s own damage debounce.
I’m currently trying that, thx
Nvm it doesn’t work. It doesn’t even damage the enemy anymore.
local Hitbox = script.Parent.Handle
local Character = game:GetService('Players').LocalPlayer.Character or game:GetService('Players').LocalPlayer.CharacterAdded:Wait()
local DamageDebounce = false
Hitbox.Touched:Connect(function(hit)
if hit.Parent.Name == Character.Name then return end
if hit ~= nil and DamageDebounce == false then
if hit.Parent:FindFirstChild('Humanoid') and hit.Parent:IsA('Model') then
DamageDebounce = true
hit.Parent['Humanoid']:TakeDamage(20)
local function ray()
local Paramas = RaycastParams.new()
local ignore = {hit.Parent,Hitbox}
repeat
Paramas.FilterDescendantsInstances = ignore
Paramas.FilterType = Enum.RaycastFilterType.Blacklist
Paramas.IgnoreWater = true
local result = true
local raycastResult = workspace:Raycast(hit.Position, -(hit.Parent.HumanoidRootPart.CFrame.LookVector) * 100, Paramas)
if raycastResult then
if raycastResult.Instance then
if raycastResult.Instance.Parent:FindFirstChild('Humanoid') and raycastResult.Instance.Parent:IsA('Model') then
raycastResult.Instance.Parent['Humanoid']:TakeDamage(20)
table.insert(ignore,raycastResult.Instance.Parent)
else
result = false
end
else
result = false
end
else
result = false
end
wait()
until result == false
end
ray()
wait(2)
DamageDebounce = false
end
end
end)
edit the script variables on top accordingly
(change hitbox to your hitbox and character to your character or whatever)
i edited the script, copy paste again.
Nope, tried everything and still doesn’t function correctly
can you show your script? like the one you copy pasted from me and edited the variables.
i attached a video to my previous reply, and it works for me.
Try using this module: Raycast Hitbox 4.01: For all your melee needs!
I tried it before and it worked great for hitboxes.