Have you used part:GetPartsInBox()? Using rays for most fighting cases aren’t satisfactory, only when using ranged weapons are rays applicable.
What the function aforementioned does is simply takes a hitbox (of lets say a fist) and finds everything that’s inside of it (you can exclude the original player) and makes a little table. From there, you can loop through that table and do whatever is necessary to certain parts.
part.Touched is great and all but heavily inconsistent and not to mention inefficient.