ClientCast - A Client-based, Idiosyncratic Hitbox System!


  • Client no longer sends Humanoid along with the HumanoidCollided remote, but rather the server verifies whether the instance has one or not when it receives the data.

  • Collided & HumanoidCollided events are now destroyed when the Caster object is destroyed.

  • RaycastResult.Instance is now checked for whether it’s nil or not if sent from the client.


  • Switched over to @tnavarts Signal implementation

hello! this seems very useful and stuff, but how do you make it so it doesn’t count accessory’s parts as the humanoid?

In HumanoidCollided, simply add a if not Object:IsA("Accessory") then check.

1 Like


The line it’s erroring on is

if Attachment.ClassName == "Attachment" and Attachment.Name == Settings.AttachmentName and not DamagePoints[Attachment] then

I’m assuming what’s going on is that you somehow parented a Roblox-locked object as a child or descendant - be it by accidentally setting the model to game, workspace or similar, or by other black wizardry.
The only case in which such an error would occur is when attempting to index Roblox-locked objects.

Could you verify that the model, and it’s descendants, are expected - ie., that it’s not something like workspace or game? You can check by going to line 423 in the module, and adding a print(CasterObject.Object:GetFullName()) to see what the object is set to.

I was told in a tutorial to put the script in ServerScriptService and the module in ServerStorage (if I put it in replicatedstorage the same thing happens)

by “object”, I mean the object you set the ClientCaster’s hitbox as -**Object**)
Also, could you try adding a print as mentioned above?

Where would I put the print though? If I put it under the line it would obviously not work, and if I put it above it would work but I probably wouldn’t be able to see it since the output would be spammed with errors.

Why would it not work on the line before? Also, you can filter the console to only show output/information and to hide errors.

1 Like

Please read the thread fully before mentioning exploiters. I’m well aware of it.

1 Like

It says the name of my game:

But the part is in workspace…

Well, it seems like you’re somehow passing the game as the object. Try using breakpoints to see what CasterObject is.

I hate autocomplete


All good. I’ll add special checks for this to make it easier to debug in the future!

1 Like

Is there a way to implement a feature to toggle debug for a specific client?
Say there’s a settings menu, I want a ‘Debug’ option that you can toggle on and off.
How do you make it so that the module’s rays are debugged by a specific client?

(sort of like Criminality)

ClientCast is meant to be barebones so that you can easily implement this sort of functionality yourself. What I do for my game is have a simple if-statement check in the localscript where the raycast is done - you could easily setup a remote event to listen to the server, and then use attributes to tell the localscript when to visualize the raycasts.

How would I go about doing this? I can kind of put together what you’re saying but I wouldn’t know how to do that since I’m not really familiar with the module

Is there any reason why are there two identical RemoteFunctions and RemoteEvents on client?