Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
COMMUNITY QUESTION

How to Make Consistent Projectile-Player Interaction?

I'm trying to make projectile attacks that don't feel inconsistent or buggy. I first made a script that can spawn in one or more parts that fly through the air to act as hit boxes. At first I decided to use part.Touched to activate a function that would have the player that was hit take damage, but in testing, it constantly seemed like the hit boxes obviously didn't hit on one players screen (normally the one getting hit), but it counted as a hit anyways. I decided to change up the script and this is what I was left with:

hitBox.Touched:Connect(function(hit)
		if hit.Parent:FindFirstChild("Humanoid") and db == false and hit.Parent ~= player.Character then
			local function GetTouchingParts(part)
		   local connection = part.Touched:Connect(function() end)
		   local results = part:GetTouchingParts()
		   connection:Disconnect()
		   return results
		end
		
	local results = GetTouchingParts(hitBox)
	print(#results)
	
	for i,v in pairs(results) do
		if v.Parent:FindFirstChild("Humanoid") and db == false then
					v.Parent:WaitForChild("Humanoid"):TakeDamage(25)
					db = true
			if v.Parent.Humanoid.Health >= 0 then
				local tag = Instance.new("ObjectValue",v.Parent.Humanoid)
				tag.Value = player
				tag.Name = "Creator"
			end
			local walkspeed = v.Parent.Humanoid.WalkSpeed
			v.Parent.Humanoid.WalkSpeed = 4
			wait(0.5)
			v.Parent.Humanoid.WalkSpeed = walkspeed
		end
	end
			
		end
	end)
end)

This is all part of a larger script where hitBox is defined as a new part in the workspace so ignore the extra ends. This script works much better, but I still run into a problem that's the exact opposite of what I had before. When a hit box obviously passes through a player, it does no damage and print(#results) shows up as 0. Is there a solution to this? Should I be using a different method to handle hit box-player interaction? Is Roblox just a buggy engine and I should switch to unity or rethink my combat system?

Here's the game link for anyone interested: https://www.roblox.com/games/4907040843/Untitled-lemark23-Project?refPageId=b04a450c-064f-4b00-931a-f6a589acbe5a&nl=true&nl=true&nl=true

1 answer

Normally I set Up My Hit Dection Like This

local hum = Character.Humanoid-----Your Humanoid !

local hithum = false----hithum stands for Hit - humanoid (It is a Debounce)

part.Touched:Connect(function(hit)

local ehum = hit and hit.Parent:FindFirstChild("Humanoid") or hit.Parent:FindFirstChild("Humanoid")---Just in case it hits an accsessory ! (also ehum stands for Enemy Huamanoid !)

if ehum and ehum ~= hum then----if the object has found a humanoid in it and it is not your humanoid (or you)

if not hithum then---If we have not hit a humanoid then

hithum = true

----/// Do Something Here Below like :


--- ehum:TakeDamge(50)---Deals 50 Damage to the Enemy Huamanoid !



end




end


end)

1 comment

0

This One Will Detect a hit If It Hitted an accessory or something else. This Will Also Compare the enemy's humanoid to your humanoid to see if the person who got hit was or was not you.

This discussion is preserved as it was. New answers, comments, and votes are closed.