Hello! My hitbox is doing much more damage than it is supposed to. I suspect it has something to do with the table of values in the hitbox, but I’m not completely sure.
here is the script:
local event = game.ReplicatedStorage.fightEvent
event.OnServerEvent:Connect(function(plr,isusingy)
if isusingy == true then
local hitbox = game.ReplicatedStorage.hitbox:Clone()
hitbox.Parent = workspace
local char = plr.Character
hitbox.CFrame = char.HumanoidRootPart.CFrame + Vector3.new(0,0,-5) * char.HumanoidRootPart.CFrame.LookVector * -1
local ptsinhitbox = workspace:GetPartsInPart(hitbox)
for i,v in pairs(ptsinhitbox) do
local succ, err = pcall(function()
if v.Parent.Humanoid then
if v.Parent.Name ~= plr.Name then
print("done")
v.Parent.Humanoid.Health -= 5
print(v.Parent.Humanoid.Health)
end
end
end)
if not succ then
print(err)
end
end
wait(0.5)
hitbox:Destroy()
end
end)
Add a debounce instance to the humanoid named debounce, and if it has debounce, don’t damage that humanoid. Add the debouce instance to the games debris service for like 3 seconds or somethig.
I suppose that your hitbox consists of multiple parts. And the in pairs loop goes through all the parts and gives the player as much damage as the amount of parts found inside the hitbox. (For example there are 4 parts found then it gives the player 20 damage)
I think the solution is to combine the parts into one part or only damaging the player one time. I am still learning scripting so apologies if I couldn’t help you exactly.
local event = game.ReplicatedStorage.fightEvent
event.OnServerEvent:Connect(function(plr,isusingy)
if isusingy == true then
local deb = false
local hitbox = game.ReplicatedStorage.hitbox:Clone()
hitbox.Parent = workspace
local char = plr.Character
hitbox.CFrame = char.HumanoidRootPart.CFrame + Vector3.new(0,0,-5) * char.HumanoidRootPart.CFrame.LookVector * -1
local ptsinhitbox = workspace:GetPartsInPart(hitbox)
for i,v in pairs(ptsinhitbox) do
local succ, err = pcall(function()
if v.Parent.Humanoid then
if v.Parent.Name ~= plr.Name and deb == false then
print("done")
v.Parent.Humanoid.Health -= 5
deb = true
hitbox:Destroy()
wait(0.5)
deb = false
print(v.Parent.Humanoid.Health)
end
end
end)
if not succ then
print(err)
end
end
hitbox:Destroy()
end
end)
the problem now is that when hit the other character once, it does damage multiple times instead of one time, but in intervals
It looks like you have multiple parts inside your hitbox. If you run a for in pairs loop it will go through the parts of the hitbox. Imagine you have 3 parts of your hitbox. Then it will grant you 5 damage 3 times because it loops through all instances that exist in that location.
You could do something like this. Check if you haven’t already damaged the humanoid by seeing if it’s found in the “Already Damaged” table. If it’s not then add the humanoid to it and proceed with your script.
local AlreadyDamaged = {}
for i,v in pairs(Parts) do
local Humanoid = v.Parent and v.Parent:FindFirstChild("Humanoid")
if not Humanoid then return end
if table.find(AlreadyDamaged,Humanoid) then return end
table.insert(AlreadyDamaged,Humanoid)
--Do your stuff
end
sorry for the late response but this is the new script:
local event = game.ReplicatedStorage.fightEvent
event.OnServerEvent:Connect(function(plr,isusingy)
if isusingy == true then
local hitbox = game.ReplicatedStorage.hitbox:Clone()
hitbox.Parent = workspace
local char = plr.Character
hitbox.CFrame = char.HumanoidRootPart.CFrame + Vector3.new(0,0,-5) * char.HumanoidRootPart.CFrame.LookVector * -1
local Alreadydam = {}
local ptsinhitbox = workspace:GetPartsInPart(hitbox)
for i,v in pairs(ptsinhitbox) do
local succ, err = pcall(function()
if v.Parent.Humanoid then
if v.Parent.Name ~= plr.Name then
if table.find(Alreadydam, v.Parent.Humanoid) then return end
table.insert(Alreadydam, v.Parent.Humanoid)
print("done")
v.Parent.Humanoid.Health -= 5
hitbox:Destroy()
wait(0.5)
table.remove(Alreadydam, table.find(Alreadydam, v.Parent.Humanoid))
end
end
end)
end
hitbox:Destroy()
end
end)
Now its doing large amounts of damage at once but in intervals.
I ended up using a Touched event and it works fine. I know this isn’t the best method, but it’s working well for me so I’m going to use it for now. Thank you all for your help, though.