Raycast Hitbox 4.01: For all your melee needs!

Thanks for your reply,
I seem to be getting the same issue when turning off PartMode
image

3 Likes

@Lamborghinious

Hi there, sorry for the late reply, did not have time to be on the DevForum but I’m back again. This seems to be the normal behaviour of the linkedswords created by Roblox (I merely ported the damage logic to them and did not edit any other functionality).

The 20+ damage is due to the initial 10 damage hitting a part (upon starting a swing), and then another 10 damage once the sword comes back up, similar to how Touched works. Multiply this damage with the amount of parts in the humanoid (and where the sword intercepted) and you got yourself the logic you witnessed.

If you require precise damage (such as only 10 damage through the entire swing), you will need to modify the sword script a little, such as removing :HitStop() and only using HitStop() after the swing is completed.

I may make another sword example that doesn’t use LinkedSwords since I do feel it’s not a good representation of the module.


Teaser for Version 3.31 (coming soon)

This minor update is targeted towards users looking to use this module for mesh deformation. I am currently testing performance and will update once I can confirm my production game runs without issue with this update. This will be exclusive to SetPoints as attachments do not work with mesh deformation bones (as of this post).

7 Likes

Hi, is there any way I can stop the .OnHit event from firing only once without restarting it? I would like to damage multiple targets at once.

1 Like

The module already damages multiple targets at once. It just cannot hit the same target(s) you hit again until you hitstop. Do you mean hitting the same target again?

1 Like

Oh, sorry, it was an error with my script.
I had a bunch of AI with the same name “Guard”, and in the script that’s supposed to damage multiple guards, it adds their name to a table and checks if that name is already there.

1 Like

Sorry for bothering but how exactly do you make animations which work with this system?

I’m purely new to animation and I knew nothing, I’ve read this topic and did everything.

However, the rays don’t move at all and only move when the actual player moves. Take a closer look here: https://gyazo.com/221a3f3bb61ee8e7d0d8f0c897c023de

Is it an animation problem or is it my code problem? I’m pretty sure my code is fine, my best guess was that the attachments’ positions didn’t move together with the part. But I’m unsure, thanks!

I used Moon Animator to animate, SetPoints instead of making attachments for the hitbox

Animations should work right out of the gate with this module. There are pretty much only two things that can cause this:

  1. Your code. I don’t see any code so it’s hard to say much about it but you should be using SetPoints on the actual weapon and not torso for example (so the weapon influences the rotation of the raycasts).

  2. Replication issue. If this module is on the serverside, Server sees the position of your weapon differently from what the client sees. A good way to test if its your code or simply replication issue is to use attachments instead of SetPoints just to see if the issue still persists. If it does, it a roblox replication issue and the only solution at this time is to put the hit detection logic on the client side. If it works, it will be your code that is the root problem.


Again, im just speculating since I haven’t seen your script.

I tested it out and turns out it’s the replication issue. Do I just implement my system on the client side now?

I also used a loop to check the position of my sword. Turns out it actually changes its position on the client, but on the server nothing changes at all. What should I do? Could it be a problem from the new animator? (I used this module a while ago with LoadAnimation and it worked just as fine)

Visualization: https://gyazo.com/9b1bbfb017ea142db66ddda0bdba40c1

Edit: Visualization

Question, does this work with projectiles? Like grenades or bow arrows. Just checking because I tried this on the server and it isn’t the best hitbox on the server, should I switch to the client and replicate it, or am I doing something wrong with the hitbox attachments.

Unfortunately I’m actually not sure what causes the replication bug (I only seen it but never experienced it. Its a question that engineers or other people can give), only that putting the module client sided and then sending the target it hit to the server (with sanity checks) is the workaround. Unless there are some ways to fix the replication bug, putting it on the client is the only suggestion I can give at this time.


@rutheniumm This module can be used for projectiles however was not intended for that use. While it can be easily setup for projectiles, I would actually recommend FastCast for that since you will have more control over things like gravity (and also uses raycasting as a solution). You are experiencing server sided latency which is not the best experience, so yeah you can go with client sided preferably for maximum responsiveness or try the FastCast module instead which is designed specifically for projectiles.

If you want to keep using this module, there are a few solutions.

  1. Again, putting it through the client side with serversided sanity checks. This ensures the user gets the best experience with a little bit more work on the security.

  2. Increase the width of the hitbox with more attachments on the server to compensate for latency.

Great module and all, but i have partmode enabled and it doest want to return any parts, it keeps returning the Model, am i doing something wrong? or am i having an actual problem with this module, i’d really like to know

Can you post the snippet of code that uses PartMode? Your code should be somewhat similar to this for PartMode to work.

local hitbox = RaycastModule:Initialize(weapon, ignoreList)
hitbox:PartMode(true)

hitbox.OnHit:Connect(function(hit, _, raycastResult)
     print(hit)
end)

hitbox:HitStart()

Do note that it does not return the same parts until you call HitStop on the hitbox.

it suddenly started working again, guess thats cool? anyways thanks for the help

so i am trying to use this system to make an advanced sword combat where it includes blocking deflecting,etc. so i just need a way to see whn it collides with another hitbox how do i do tht?

On the Github link in the OP, there is a section in advanced tutorials about PartMode which should allow you to do what you are describing. It listens to part hits (like Touched events does) and you can use this to determine what to do once it hits a certain part / hitbox.

1 Like

so i was trying to use SetPoint instead of attachment and it stopped detecting hits.

i set points each time they atked using-


local points = {}
	for i= tools[tool].Tool.Hitbox.Position.Y - tools[tool].Tool.Hitbox.Size.Y/2, tools[tool].Tool.Hitbox.Position.Y + tools[tool].Tool.Hitbox.Size.Y/2,0.5 do
		for x = tools[tool].Tool.Hitbox.Position.X-tools[tool].Tool.Hitbox.Size.X/2,tools[tool].Tool.Hitbox.Position.X + tools[tool].Tool.Hitbox.Size.X/2,0.5 do
			points[#points+1] = Vector3.new(x,i,tools[tool].Tool.Hitbox.Position.Z);
		end
	end
	tools[tool].hitbox:SetPoints(tools[tool].Tool.Hitbox,points)

and yes i do hitstart and hitstop it worked before

Hello, I got a another question. Would this be more performant than casting a rotated region3 with the players limb CFrame and size every frame until a animation stops playing?

Idk why the rays do not appear in the first attack move, but it does after that
https://gyazo.com/6aeeaa40a974ed0b92edb5ed88aeea3d
I also test linkattackment. it is much laggy than use the original ray. With the original rays, I need to use many rays to get it accurate as I have with linkattackment . I haven’t tested with many players yet

I think the problem is with HitStart(). If I let HitStart(animation.length) → the first hit sometimes not work, but if i let HitStart(0.6)–> the first hit always work .@TeamSwordphin. I have no idea why this happen

it does print animation.length =0 at first hit wtf while it still plays the animation. idk why this happens.
Edit: ok I found the solution. Put this to check animation.Length so that the first hit will always work. Im not sure if it canbe laggy tho. Can someone confirm
while true do
wait()
if animation.Length >0 then
break
end
end